CakePHP:ErrorHandler停止工作

时间:2014-04-02 12:37:24

标签: cakephp exception authentication cakephp-2.4 exceptionhandler

在我的页面中(使用CakePHP 2.4),我添加了一个功能,当有ajax请求时,如果用户没有登录,则抛出401 Unauthorized HTTP错误,以便ajax可以捕获它并知道必须重定向登录。但问题是ErrorHandler没有捕获它,它显示为Uncaught exception

PHP Fatal error: Uncaught exception 'UnauthorizedException' with message 'Su sesión ha terminado. Por favor ingrese nuevamente' in D:\wamp\www\app\Controller\AppController.php:121 

事实是我修改了一些值来实现我自己的处理程序,但后来我改变主意并恢复了默认值,所以可能我错过了一些东西。现在不会发现任何类型的错误,甚至是404错误,也不会发现ajax和普通的http请求。

这是我的AppController::beforeFilter代码:

public function beforeFilter()
{
    if($this->Session->check('login.language'))
    {
        Configure::write('Config.language', $this->Session->read('login.language'));
    }
    else
    {
        Configure::write('Config.language', "spa");
    }
    parent::beforeFilter();
    //Here is the login check part
    if(!$this->Auth->user('id') && $this->request->is('ajax') && !(in_array($this->request->params['action'], array('login', 'cambiar_idioma'))))
    {
        throw new UnauthorizedException(__("Su sesión ha terminado. Por favor ingrese nuevamente"));
    }

}

core.php中的处理程序配置:

Configure::write('Error', array(
    'handler' => 'ErrorHandler::handleError',
    'level' => E_ALL & ~E_DEPRECATED & ~E_STRICT,
    'trace' => true
));

Configure::write('Exception', array(
    'handler' => 'ErrorHandler::handleException',
    'renderer' => 'ExceptionRenderer',
    'log' => true
));

Configure::write('debug', 2);

那么,任何想法为什么它没有捕获任何例外?

1 个答案:

答案 0 :(得分:0)

终于得到了答案。 重新安装Cake后,按文件移动页面文件中的所有内容,我发现jpGraph库与Cake错误处理相冲突。因为我在文件顶部导入了库,所以每次请求都搞乱了,所以我将它移动到各自的功能并按预期工作。