2

在我正在处理的一个项目中,需要为每个捆绑包实现自定义 404 页面。

文档中没有提到此类功能。

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

恕我直言,这应该通过对 symfony 路由器组件应用补丁来解决,这将允许开发人员指定可以进一步处理这种情况的包罗万象的路由。

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

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

你怎么看?
我也将不胜感激任何其他解决方法。

4

1 回答 1

1

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

  • 默认捆绑包有一个优先级为 -1024 的侦听器。
  • 如果自定义捆绑包处理异常并设置其响应,则必须标记事件并停止传播。
  • 自定义包可以使用服务容器来获取它想要的任何东西,以确定是否处理异常。
于 2013-02-05T15:08:15.347 回答