【问题标题】:Symfony attributes routes not taken into accountSymfony 属性路由未考虑在内
【发布时间】: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 文件。有可能你只从骨架开始吗?可能需要安装注释的东西。

标签: php symfony routes symfony5


【解决方案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 无法识别我的基于属性的路由。
猜你喜欢
  • 2013-10-23
  • 1970-01-01
  • 2023-01-03
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
  • 2020-08-24
  • 2016-03-29
  • 1970-01-01
相关资源
最近更新 更多