我將所有控制器移至 Symfony 6 項目中的 /src/Web/Controller
,如下所示
├── src │ ├── ... │ └── Web │ | ├── Controller │ | ├── .... | |── Kernel.php
我的routes.yaml
相應(yīng)修改
#routes.yaml controllers: resource: ../src/Web/Controller/ type: annotation
現(xiàn)在的問題是我的所有路由都有一個以 app_web
為前綴的名稱。我想這是由于這種結(jié)構(gòu)。
$ php bin/console debug:router
命令輸出如下:
... ... app_web_post_index GET|HEAD ANY ANY /post/ app_web_post_create GET|HEAD|POST ANY ANY /post/create
這里我只希望名稱為 post_index
如何去掉這個前綴?
如果您沒有明確命名路由,它們會為您命名。
名稱是使用控制器的類和方法的完全限定名稱生成的(盡管由于某種原因沒有命名空間的最后一部分 -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'); } }
使用內(nèi)置選項您可以向一組路由添加前綴,但不要將其從自動生成的名稱中刪除。
如果這對于您的用例“自動”發(fā)生確實很重要,我想你可以構(gòu)建自己的路由加載器,但我想說這有點過分了。只需適當(dāng)?shù)孛酚?,或者使用自動生成的名稱即可。
顯式命名路由通常是一個更好的想法/實踐,因為如果您在其他任何地方引用路由名稱,即使您選擇將控制器重構(gòu)為不同的代碼結(jié)構(gòu),也可以保證名稱保持不變。