Symfony 属性路由未考虑在内

Posted

技术标签:

【中文标题】Symfony 属性路由未考虑在内【英文标题】:Symfony attributes routes not taken into account 【发布时间】:2021-07-15 20:39:02 【问题描述】:

我有一个在 php 8 上运行的现有 Symfony 5.2 应用程序,它使用 YAML 配置进行路由。

我想将其转换为使用属性。我添加了一个config/routes/annotations.yaml 文件:

controllers:
  resource: ../../src/UserInterface/Web/
  type: annotation

kernel:
  resource: ../../src/Kernel.php
  type: annotation

(是的,我的控制器在src/UserInterface/Web!)

我从.yaml 配置文件中删除了我的路由,并为控制器添加了属性:

...
use Symfony\Component\Routing\Annotation\Route;

class HomeController

    #[Route('/', name: 'homepage')]
    public function index(Request $request): Response  ... 

但是我的主页现在显示“欢迎使用 Symfony”页面。我试过了:

bin/console debug:router

但它不显示homepage 路由。我尝试改用 Doctrine 注释:

/**
 * @Route("/", name="homepage")
 */
public function index(Request $request): Response  ... 

也没有运气。我尝试清除缓存:

bin/console cache:clear

但问题仍然存在。 我错过了什么?

【问题讨论】:

您仍然需要将控制器配置为 type: annotation。此功能仅更改您在控制器类中声明路由的方式(改为使用属性)。 @yceruto 我不确定你在这里建议什么......? 你还有其他事情发生。我做了一个新的 5.2.6 项目,添加了你的 UserInterface\Web\HomeController 以及你的路由属性。调整 annotations.yaml 和主页路由显示在 debug:router 中。也许尝试流行的缓存清除。我假设您也在使用 PHP 8。 @Cerad,使用 PHP 8,并已清除缓存。应该提到它。 您说您“添加”了 annotations.yaml 文件这一事实可能是一个线索。如果您从网站骨架开始,那么您应该已经在 config/routes 目录中有一个 annotations.yaml 文件。有可能你只从骨架开始吗?可能需要安装注释的东西。 【参考方案1】:

注意:被证明是问题正确答案的评论是基于提供的信息和关于缓存被清除的讨论的假设。

跑完路线没有列出来:

bin/console debug:router

../../src/Kernel.php 中的 Kernel::configureRoutes() 方法被某种方式篡改了。

default method implementation 缺少以下代码行:

$routes->import('../config/routes/*.yaml');

正如问题作者所证实的那样。

【讨论】:

如果你使用属性告诉 Symfony 使用 #[Route('/login', name: 'login')] 的路由,不要忘记通过 use Symfony\Component\Routing\Annotation\Route; 包含 Route 类没有它 Symfony 无法识别我的基于属性的路由。

以上是关于Symfony 属性路由未考虑在内的主要内容,如果未能解决你的问题,请参考以下文章

不考虑 symfony 4 的变化

symfony 发生错误:注意:未定义的属性:::$container

Symfony:在 SecurityContext 中找不到用于防火墙后路由的令牌

Symfony 3 将所有路由重定向到当前语言环境版本

Symfony 4如何使用React设置SPA(单页面应用程序)?

Symfony路由配置教程已开课