我可以根据特定条件使CakePHP返回合适的状态代码吗?

时间:2009-06-03 13:58:03

标签: cakephp http-status-code-404

此问题与我的旧帖子Dealing with Alias URLs in CakePHP

略有关联

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

我正在考虑状态代码。我可以根据特定条件使脚本返回合适的状态代码吗?例如:

  1. 网址与重定向匹配 - 返回301
  2. 网址确实没有目的地 - 返回404。
  3. 我可以这样做吗?

    编辑:

    这个怎么样?有人看到任何问题吗?我把它放在app_controller中。

    function appError($method, $params) {
    
        //do clever stuff here
    
    }
    

3 个答案:

答案 0 :(得分:6)

这应该有效。假设您在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;
    }
}
?>
祝你好运!

答案 1 :(得分:4)

我一直在创建 app \ views \ errors \ missing_action.ctp app \ views \ errors \ missing_controller.ctp

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

除非您没有给出错误代码 ,否则这将完美无缺!

答案 2 :(得分:0)

我想补充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);
        }
}