无所不在的“未被捕获的例外”

时间:2013-03-04 16:03:32

标签: zend-framework exception error-handling uncaught-exception

所以我的Zend Framework一直拒绝处理异常,尽管我做了每个人在Google上做的所有事情......所以我在这里问我可能做错了什么......

我在app / modules / default / controllers中设置了我的ErrorController.php文件,其中包含以下内容:

<?php
class ErrorController extends Zend_Controller_Action
{
    public function errorAction()
    {
        $error = $this->_getParam('error_handler');
        switch ($error->type){
            case "EXCEPTION_NO_CONTROLLER":
            case "EXCEPTION_NO_ACTION":
                $this->getResponse()->setHttpResponseCode(404);
                $this->view->title = "Page Not Found";
                $this->view->message = "404 - Oops ! You took a wrong turn...";
                break;
            default:
                $this->getResponse()->setHttpResponseCode(500);
                $this->view->title = "Unexpected Error";
                $this->view->headmessage = "500 - Oops ! Something wrong happened... ";
                $this->view->message     = $error->exception->getMessage();
                break;
        }
        $this->view->exception = $error->exception;
        // pass the request to the view
        $this->view->request   = $error->request;
    }
}

在我的index.php中,我只包含app / bootstrap.php,其中包含:

$front = Zend_Controller_Front::getInstance();
$front->throwExceptions(false);
$front->setControllerDirectory('./application/controllers');
$front->registerPlugin(new Zend_Controller_Plugin_ErrorHandler());

然而,在我的代码中,我打电话,例如:

throw new Zend_Controller_Exception('This page does not exist', 404);

我得到了通常令人讨厌的“致命错误:未捕获的异常'Zend_Controller_Exception',并显示消息'此页面不存在'”并等等等等等等等等...

我有什么问题吗?我想知道'./application/controllers'是否正确,因为据我所知,我的Zend框架文件夹中没有一个“应用程序”文件夹...但我在网上找不到任何关于它的信息!并创建一个将我的ErrorController.php放入其中导致我无处可去......

1 个答案:

答案 0 :(得分:0)

好吧,事实证明,我的身份验证插件与重定向冲突(我现在已经知道这是一个非常常见的问题),所以我设法通过摆弄我的身份验证插件的规则来解决它。

值得注意的是,必须通过使用“isDispatchable”方法检查路由并“手动”将路由更改为特定的404页面,在Authentication Plugin中处理404错误重定向。

至少那对我来说是这样的,但重要的是要知道没有单一的Authentication Plugin冲突解决方案,因为每个身份验证插件都有所不同,具体取决于它的用途。