Ich habe alle Controller in meinem Symfony 6-Projekt nach /src/Web/Controller
verschoben, wie unten gezeigt
├── src │ ├── ... │ └── Web │ | ├── Controller │ | ├── .... | |── Kernel.php
Mein routes.yaml
entsprechend 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?
如果您沒有明確命名路由,它們會(huì)為您命名。
名稱是使用控制器的類和方法的完全限定名稱生成的(盡管由于某種原因沒有命名空間的最后一部分 -controller
)。
如果您不想使用自動(dòng)生成的名稱,只需自己命名您的路線即可:
#[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'); } }
使用內(nèi)置選項(xiàng)您可以向一組路由添加前綴,但不要將其從自動(dòng)生成的名稱中刪除。
如果這對(duì)于您的用例“自動(dòng)”發(fā)生確實(shí)很重要,我想你可以構(gòu)建自己的路由加載器,但我想說這有點(diǎn)過分了。只需適當(dāng)?shù)孛酚?,或者使用自?dòng)生成的名稱即可。
顯式命名路由通常是一個(gè)更好的想法/實(shí)踐,因?yàn)槿绻谄渌魏蔚胤揭寐酚擅Q,即使您選擇將控制器重構(gòu)為不同的代碼結(jié)構(gòu),也可以保證名稱保持不變。