如果找不到控制器,如何重定向? (cakephp的)

时间:2012-02-06 21:14:57

标签: php cakephp redirect

这是我的路线档案。如果找不到控制器,如何重定向到数组('controller'=>'pages','action'=>'display','home')?

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('/login', array("controller"=>"user","action"=>"login"));
Router::connect('/settings', array("controller"=>"user","action"=>"settings"));
Router::connect('/logout', array("controller"=>"user","action"=>"logout"));
Router::connect('/video', array("controller"=>"video","action"=>"index"));
Router::connect('/video/page/*', array("controller"=>"video","action"=>"page"));
Router::connect('/video/*', array("controller"=>"video","action"=>"view")); 
Router::connect('/upcoming', array("controller"=>"user","action"=>"upcoming"));

3 个答案:

答案 0 :(得分:1)

您应该创建一个自定义异常处理程序,将用户重定向回主页。请参阅此主题的documentation

可能是这样的(未经测试,但只是为了让你知道从哪里开始):

class AppErrorHandler {
    public static function handleException($error) {
        if ($error instanceof MissingControllerException) {
            // Redirect home, $this->redirect will probably not work,
            // since the Error Handler doesn't extend the AppController.
            header('Location: /');
            exit;
        }
    }
}

答案 1 :(得分:1)

你需要的是here整洁地解释并且工作得很好>希望这会对你有帮助。

OR

转到 HERE

答案 2 :(得分:1)

这很简单。在/ app目录中创建app_error.php文件,(就像app_model.phpapp_controller.php一样)

完成后,请输入以下内容:

<?php
class AppError extends ErrorHandler {


    function missingController($params) {
        extract($params, EXTR_OVERWRITE);

        $this->controller->redirect('/');
    }    


}

现在,这应该可以解决您的问题。如果需要调用组件和beforeFilters / Renders,可以从构造函数中调用它们。