Symfony 6 中的命名路由,控制器位于内部目录中

Sho*_*obi 5 php symfony symfony-routing symfony6

我将所有控制器移至/src/Web/Controller我的 Symfony 6 项目中,如下所示

\n
\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\n
Run Code Online (Sandbox Code Playgroud)\n

我的routes.yaml作相应修改

\n
\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\n
Run Code Online (Sandbox Code Playgroud)\n

现在的问题是我所有的路线都有一个前缀为的名称app_web。我想这是由于这种结构。

\n

$ php bin/console debug:router命令输出如下:

\n
...\n...\napp_web_post_index    GET|HEAD        ANY      ANY    /post/             \napp_web_post_create   GET|HEAD|POST   ANY      ANY    /post/create \n
Run Code Online (Sandbox Code Playgroud)\n

在这里我只想要名字post_indexHow do I摆脱这个前缀?

\n

yiv*_*ivi 2

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

\n

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

\n

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

\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}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n
\n

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

\n