Benanntes Routing in Symfony 6 mithilfe des Controllers aus dem internen Verzeichnis
P粉511749537
P粉511749537 2024-03-26 16:27:48
0
1
444

Ich habe alle Controller in meinem Symfony 6-Projekt nach /src/Web/Controller verschoben, wie unten gezeigt

├── src
│   ├── ...
│   └── Web
│   |    ├── Controller
│   |    ├── ....
|   |── Kernel.php

Mein routes.yamlentsprechend geändert

#routes.yaml
controllers:
    resource: ../src/Web/Controller/
    type: annotation

Das Problem ist nun, dass alle meine Routen einen Namen mit dem Präfix app_web haben. Ich vermute, dass es an dieser Struktur liegt.

$ php bin/console debug:router Die Befehlsausgabe lautet wie folgt:

...
...
app_web_post_index    GET|HEAD        ANY      ANY    /post/             
app_web_post_create   GET|HEAD|POST   ANY      ANY    /post/create

Hier möchte ich nur den Namen haben post_index Wie entferne ich dieses Präfix?

P粉511749537
P粉511749537

Antworte allen(1)
P粉011684326

如果您没有明确命名路由,它们会为您命名。

名称是使用控制器的类和方法的完全限定名称生成的(尽管由于某种原因没有命名空间的最后一部分 -controller)。

如果您不想使用自动生成的名称,只需自己命名您的路线即可:

#[Route('/post')]
class Post
{
    #[Route(path: '/', name: 'post_index', methods: ['HEAD', 'GET'])]
    public function index(Request $request): Response
    {
        return new Response('post index');
    }

    #[Route(path: '/create', name: 'post_create', methods: ['HEAD', 'GET', 'POST'])]
    public function create(Request $request): Response
    {
        return new Response('post create');
    }
}

使用内置选项您可以向一组路由添加前缀,但不要将其从自动生成的名称中删除。

如果这对于您的用例“自动”发生确实很重要,我想你可以构建自己的路由加载器,但我想说这有点过分了。只需适当地命名路由,或者使用自动生成的名称即可。


显式命名路由通常是一个更好的想法/实践,因为如果您在其他任何地方引用路由名称,即使您选择将控制器重构为不同的代码结构,也可以保证名称保持不变。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!