使用注释路由时在 Symfony 4 中的回退路由



我目前正在Symfony 4应用程序中通过控制器注释使用路由。

我正在尝试将所有与现有注释不匹配的请求(例如 http://example.com/route 未定义(路由到特定的控制器和功能(例如DefaultController::dynamicPage()有逻辑来查找我是否应该提供内容或触发NotFoundHttpException(。

DefaultController::dynamicPage()的路由定义为@Route("/{param}")在所有其他定义的路由之前并截获,使它们无法访问。

我已经为Symfony 3尝试了这个解决方案,不知道它是否有效,但卡在"AppBundle"应该指的是什么上,因为它不是我的项目中存在的东西。

目前,我的 routes.yaml 中只有一个用于索引的路由,因为所有其他命名路由都是通过注释定义的:

index:
path: /
controller: AppControllerDefaultController::index

我正在寻找在Symfony4中实现链接Symfony 3解决方案的正确方法,或者实现我想要的路由的替代方法,而无需执行诸如扩展异常控制器之类的复杂操作并将路由功能插入NotFoundHttpException

您可以尝试添加将处理kernel.exception事件的内核事件侦听器,对于异常是NotFoundHttpException的情况,您将返回自定义响应而不是 404 未找到页面。

这可能非常灵活,因为您可以在此类侦听器中实现任何自定义逻辑。

我还没有迁移到 sf4,但这个问题不与正在评估的路由的顺序有关吗? 即,您可以尝试通过添加显式定义来加载 routes.yml 中的 DefaultController.php注释作为最后一个元素? 即这样的东西应该可以解决问题(至少在 sf2.8 中有效(:

app_annotations:
resource: '@MyBundle/Controller/'
type:     annotation
fallback_annotations:
resource: '@MyBundle/Controller/DefaultController.php'
type:     annotation

或者,如果这在 SF4 中不起作用(如果它自动使用其他逻辑加载控制器路由注释(,另一种解决方法是仅命名此回退控制器,以便它按字母顺序成为最后一个(因此应该评估最后一个路由(。

从您的评论中,我"闻到"您有一些与项目当前配置不兼容的作曲家包。您是否要从 SF3 升级到 SF4?

我也有这个InvalidArguementException

"The "App" (from the _controller value "App:Default:index") does not exist 
or is not enabled in your kernel...

原来我有一个不受支持的软件包easycorp/easyadmin-bundle版本^3.1我修复了它

  1. 删除vendor文件夹
  2. 删除composer.lock文件。
  3. 在 composer.json 中显式指定我的项目支持的版本^2.3
  4. 运行作曲家安装...瞧!

相关内容

  • 没有找到相关文章

最新更新