我正在用Symfony 4构建一个可以通过插件扩展的应用程序。插件本质上是捆绑软件,但它们只是放到了文件夹中,不必激活(例如,在config/bundles.php
或config/routes/
中)。
为了让插件自动注册路由,我让CMF链路由器覆盖了默认的symfony @router
服务。然后,每个插件可以具有标记为router
的服务,链路由器将其添加到链中。这部分有效。
为了使插件更容易注册路由,核心应用提供了一个AnnotationRouter
类,该类采用了在其中查找带注释的控制器的路径。然后,插件将注册如下服务:>
sample_plugin.router:
class: MyApp\Routing\AnnotationRouter
arguments: ['@service_container', '@@SamplePlugin/Controller']
tags:
- { name: router, priority: 20 }
但是,这些路线的行为非常奇怪。实际上,它们仅在清除缓存后才对第一个请求起作用!所有后续请求均返回404
错误。这就是symfony探查器中“路由”标签的样子。
在顶部说不匹配路线,但是在底部说匹配!我不知道该怎么做。
此外,bin/console router:match /test2
与路线匹配,并且bin/console debug:router
列出路线。默认symfony路由器(除插件路由器之外,它是链中唯一的其他路由器)的所有路由都可以正常工作。
有趣的是,所有这些在以前仍在使用symfony 3时就已经起作用了。
答案 0 :(得分:0)
好吧,事实证明,这毕竟不是CMF路由链路由器的问题,而是实际路由器的实现。
我的路由器实现如this question中所述。该问题与Doctrine的注释阅读器和注释自动加载有关。我最终安装了indigophp/doctrine-annotation-autoload
,但这显然只是一种解决方法。
另请参见GitHub上的Autoloading annotation classes。