Sho*_*obi 5 php symfony symfony-routing symfony6
我将所有控制器移至/src/Web/Controller我的 Symfony 6 项目中,如下所示
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Web\n\xe2\x94\x82 | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Controller\n\xe2\x94\x82 | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ....\n| |\xe2\x94\x80\xe2\x94\x80 Kernel.php\nRun Code Online (Sandbox Code Playgroud)\n我的routes.yaml作相应修改
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Web\n\xe2\x94\x82 | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Controller\n\xe2\x94\x82 | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ....\n| |\xe2\x94\x80\xe2\x94\x80 Kernel.php\nRun Code Online (Sandbox Code Playgroud)\n现在的问题是我所有的路线都有一个前缀为的名称app_web。我想这是由于这种结构。
$ php bin/console debug:router命令输出如下:
...\n...\napp_web_post_index GET|HEAD ANY ANY /post/ \napp_web_post_create GET|HEAD|POST ANY ANY /post/create \nRun Code Online (Sandbox Code Playgroud)\n在这里我只想要名字post_indexHow do I摆脱这个前缀?
如果您没有明确命名路由,它们会为您命名。
\n这些名称是使用控制器的类和方法的完全限定名称生成的(尽管由于controller某种原因没有命名空间 \xe2\x80\x94 \xe2\x80\x94 的最后部分)。
如果您不想使用自动生成的名称,只需自己命名您的路线:
\n#[Route(\'/post\')]\nclass Post\n{\n #[Route(path: \'/\', name: \'post_index\', methods: [\'HEAD\', \'GET\'])]\n public function index(Request $request): Response\n {\n return new Response(\'post index\');\n }\n\n #[Route(path: \'/create\', name: \'post_create\', methods: [\'HEAD\', \'GET\', \'POST\'])]\n public function create(Request $request): Response\n {\n return new Response(\'post create\');\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n使用内置选项,您可以向一组路由添加前缀,但不能将其从自动生成的名称中删除。
\n如果这对于您的用例“自动”发生确实很重要,我想您可以构建自己的路由加载器,但我想说这有点过分了。只需适当地命名路线,或者使用自动生成的名称即可。
\n显式命名路由通常是一个更好的想法/实践,因为如果您在其他任何地方引用路由名称,即使您选择将控制器重构为不同的代码结构,也可以保证名称保持不变。
\n