1

我正在使用 symfony 1.4。

发生 404 错误时,我需要重定向某些 url。假设用户正在寻找一个 url http://example.com/oldurl并且它不存在我想检查这个 url 是否设置为重定向。如果将 url 设置为重定向,我想将其重定向到该 url。

问题:我应该挂钩哪个事件来获取有关请求的 url 的信息,该信息被重定向到 404 错误页面?

PS 如果页面不存在,我们只想检查重定向。我们不想为每个请求运行“检查”,只有在找不到页面时!

多谢!

4

2 回答 2

1

每次找不到页面时,Symfony 都会触发一个事件:controller.page_not_found.

您可以在文档中找到它:http ://www.symfony-project.org/reference/1_4/en/15-Events#chapter_15_sub_controller_page_not_found

编辑:

您可以通过调用上下文来检索侦听此事件的方法中的 url。有这样的东西:

$context = sfContext::hasInstance() ? sfContext::getInstance() : null;
if(null !== $context)
{
  $requested_url = $context->getRequest()->getUri();
}

您可以仔细查看插件sfErrorNotifierPlugin,它会捕获异常和 404 错误并发送电子邮件以获取报告。看看他们如何处理 404 错误

于 2012-04-13T05:30:37.793 回答
0

我不知道在执行堆栈中准确挂钩的位置,但我知道通过路由的一般更清洁的方式。如果您在代码中没有默认路由规则的情况下进行路由(此后您不应该练习),那么它就像您的应用程序中的以下内容一样简单routing.yml(最后):

catch_all:
  url: /*
  param: { module: yourModule, action: handleNotFound }
于 2012-04-12T22:44:46.617 回答