【问题标题】:What event to hook to redirect on 404 errors? Symfony 1.4挂钩什么事件来重定向 404 错误? Symfony 1.4
【发布时间】:2012-04-12 22:40:00
【问题描述】:

我正在使用 symfony 1.4。

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

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

P.S 我们只想在页面不存在时检查重定向。我们不想对每个请求都运行“检查”,只有在找不到页面时!

非常感谢!

【问题讨论】:

    标签: redirect symfony1 event-handling symfony-1.4


    【解决方案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 错误并发送电子邮件进行报告。看how they handle 404 error

    【讨论】:

    • @jOk 你错过了“...获取有关请求的 url 的信息...”部分。知道如何在“controller.page_not_found”挂钩上获取请求的网址吗?
    • 不错的插件,应该先用谷歌搜索,因为我实际上在一个月前实现了同样的东西。
    • @mhitza 还有一个更解耦/复杂的插件:fpErrorNotifierPlugin
    【解决方案2】:

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

    catch_all:
      url: /*
      param: { module: yourModule, action: handleNotFound }
    

    【讨论】:

    • 这是我们想要避免的事情,我们只想检查是否有针对某个 url 的重定向规则,如果只有页面没有找到。
    • 我们不想检查每个请求,这会损害性能!
    • 我想你误解了 symfony 的路由部分。放置在路由底部的这个将在没有其他匹配时匹配,因此仅适用于 404 页面。
    • 早期路由中的模块也会重定向到 404。例如:如果未找到产品,则显示 404error。我想我必须检查一下!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    相关资源
    最近更新 更多