如何在symfony 2.x中实现每个bundle 404页面

时间:2013-02-04 13:18:05

标签: symfony

在其中一个项目中,我需要为每个捆绑包实施自定义404页面。

documentation内,没有提到这种功能。

我正在与一些同事讨论这个问题,并被告知它必须使用kernel.exception事件,唉这个缺少bundle调用它的信息。

恕我直言,这应该通过对symfony路由器组件应用补丁来修复,这将允许开发人员指定可以进一步处理案例的catch-all路由。

另一种选择是更改RouterInterface :: match方法的行为,以返回包含匹配路径和匹配路径的包的一致输出。目前这是不可能的,因为如果匹配失败并且根本没有给你任何信息它会引发异常,但它可能会。

例如,我有一个ApiBundle,它定义为处理以" / api"开头的网址。目前处理这个并设置自定义404页面的唯一方法是在kernel.exception和preg_match()url时获取请求。然而,这是应该避免的硬编码,因为bundle不应该具有这样的知识 - 它是在app / config / routing文件下定义的。

您的意见是什么? 我也很感激其他任何解决方法。

1 个答案:

答案 0 :(得分:1)

我最终实现了我的自定义ExceptionController,它调度了一个名为'ourCompany.exception_response'的事件。

  • 默认捆绑包的侦听器设置优先级为-1024。
  • 如果自定义捆绑包处理异常并设置其响应,则必须标记事件并停止传播。
  • 自定义捆绑包可以使用服务容器获取它想要的任何内容,以确定是否处理异常。