0

所以我的 Zend 框架一直拒绝处理异常,尽管我做了每个人在谷歌上建议的一切......所以我在这里问我可能做错了什么......

我在 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 放入其中使我到目前为止无处可去...

4

1 回答 1

0

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

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

Well at least that did it for me, but the important thing to know is that there is no single solution to Authentication Plugin conflicts because every authentication plugin is different, depending on the purpose of it.

于 2013-03-12T16:13:53.410 回答