【问题标题】:Can I make CakePHP return a suitable status code based on certain conditions?我可以让 CakePHP 根据某些条件返回合适的状态码吗?
【发布时间】:2010-10-31 00:05:05
【问题描述】:

这个问题和我的旧帖Dealing with Alias URLs in CakePHP有点关系

经过深思熟虑,我正在探索在我的 Cake 应用程序中使用自定义 404 脚本的选项,当 URL 未映射到任何控制器/操作时会达到该选项。该脚本将检查 $this->here 并在重定向数据库中查找它。如果找到匹配项,它将跟踪特定的“促销”代码并重定向。

我在考虑状态码。我可以让我的脚本根据某些条件返回合适的状态码吗?例如:

  1. URL 匹配重定向 - 返回 301
  2. 网址确实没有目的地 - 返回 404。

我可以这样做吗?

编辑:

这个呢?有人看到它有什么问题吗?我把它放在 app_controller 中。

function appError($method, $params) {

    //do clever stuff here

}

【问题讨论】:

    标签: cakephp http-status-code-404


    【解决方案1】:

    这应该可以。假设您在 LegacyUrls::map() 控制器操作中重定向 404。代码需要存放在app/app_error.php中:

    <?php
    class AppError extends ErrorHandler{
        function error404($params) {
            $Dispatcher = new Dispatcher();
            $Dispatcher->dispatch('/legacy_urls/map', array('broken-url' => '/'.$params['url']));
            exit;
        }
    
        function missingController($params) {
            $Dispatcher = new Dispatcher();
            $Dispatcher->dispatch('/legacy_urls/map', array('broken-url' => '/'.$params['url']));
            exit;
        }
    }
    ?>
    

    祝你好运!

    【讨论】:

      【解决方案2】:

      我总是创建 app\views\errors\missing_action.ctpapp\views\errors\missing_controller.ctp

      当 url 没有映射到控制器或其方法时,Cake 将自动显示其中一个视图。

      除非您没有提供的错误代码有一定的需要,否则这将完美地工作!

      【讨论】:

        【解决方案3】:

        我想补充一下 felixge 的回答。

        此版本向浏览器输出 404 错误:

        class AppError extends ErrorHandler
        {
                function _outputMessage($template)
                {
                        if ($template === 'error404') {
                                $Dispatcher = new Dispatcher();
                                $Dispatcher->dispatch('legacy_urls/map', array('broken-url' => '/'.$params['url']));
                                return;
                        }
                        parent::_outputMessage($template);
                }
        }
        

        【讨论】:

          猜你喜欢
          • 2020-04-29
          • 2019-05-01
          • 2015-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多