我正在使用 symfony 1.4。
发生 404 错误时,我需要重定向某些 url。假设用户正在寻找一个 url http://example.com/oldurl并且它不存在我想检查这个 url 是否设置为重定向。如果将 url 设置为重定向,我想将其重定向到该 url。
问题:我应该挂钩哪个事件来获取有关请求的 url 的信息,该信息被重定向到 404 错误页面?
PS 如果页面不存在,我们只想检查重定向。我们不想为每个请求运行“检查”,只有在找不到页面时!
多谢!
我正在使用 symfony 1.4。
发生 404 错误时,我需要重定向某些 url。假设用户正在寻找一个 url http://example.com/oldurl并且它不存在我想检查这个 url 是否设置为重定向。如果将 url 设置为重定向,我想将其重定向到该 url。
问题:我应该挂钩哪个事件来获取有关请求的 url 的信息,该信息被重定向到 404 错误页面?
PS 如果页面不存在,我们只想检查重定向。我们不想为每个请求运行“检查”,只有在找不到页面时!
多谢!
每次找不到页面时,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 错误。
我不知道在执行堆栈中准确挂钩的位置,但我知道通过路由的一般更清洁的方式。如果您在代码中没有默认路由规则的情况下进行路由(此后您不应该练习),那么它就像您的应用程序中的以下内容一样简单routing.yml
(最后):
catch_all:
url: /*
param: { module: yourModule, action: handleNotFound }