zend-framework - Zend Framework 应用程序 - 在生产模式下显示 404 错误页面/通用错误页面并在开发模式下显示异常

标签 zend-framework error-handling http-status-code-404

我的目标是实现以下目标; 在任何环境中,生产、测试​​或开发,应用程序都可以有 2 种模式:生产模式和 Debug模式。

目前,我已经进行了设置,以便 config.ini 具有此设置。没有问题。

当我想要实现以下目标时,问题就出现了: 如果设置了生产模式,我只想显示一个自定义错误页面,如果找不到 Controller /操作,则显示 404 消息;如果发生不同类型的错误(抛出异常、连接错误),则显示通用错误消息, ETC)。我还需要尽可能将异常记录到日志/文本文件中。 如果设置了 Debug模式,我只想看到发生的异常。

我尝试了各种方法,但似乎走进了死胡同。 我尝试过使用 ErrorHandler 插件,但发生异常时它只显示空白页面。 我尝试使用自定义插件来处理 404 错误,但实际上不起作用,因为它与我的身份验证插件冲突。尝试不使用身份验证插件,但由于我使用了模块(实际上只有 1 个模块,对于管理员来说),它出现了问题。

在尝试了各种其他方法及其组合之后,我似乎无法找到实现此目标的方法。

如果有人能够阐明如何最好地获得所需的结果,我将不胜感激。

如果可以的话,我还有一些假设希望得到澄清。他们是:

$oFrontController->throwExceptions(false);

必须设置为 false 才能使 ErrorHandler 插件正常工作。这是正确的吗?

try {
$oFrontController->dispatch();
} catch (Exception $oException) {
...
}

我有上面的代码来捕获抛出的异常并记录它们,但如上所述,似乎没有完成这项工作(当我不使用 ErrorHandler 时工作正常,通过设置 $oFrontController->抛出异常(true);)。

处理身份验证的最佳方法是什么?我目前将其设置为插件,它根据模块/ Controller 设置“资源”并检查 ACL 类以确定是否授予访问权限。我见过一些 ACL 部分在 Controller 基础上是分开的示例。将身份验证作为在 Controller 初始化时调用的模型并检查其各自的权限集是否应该允许该操作是否更明智? (我问这个主要是因为尝试使用身份验证执行错误页面以查看可用的替代方案时出现的冲突)

感谢您在此事上为我提供的任何帮助。谢谢。

最佳答案

安装Exception Formatter Plugin并创建一个错误 Controller

class ErrorController extends Zend_Controller_Action {
    public function errorAction() {
        $environment = Zend_Registry::getInstance()->configuration->environment;
        if( $environment == 'development' ) {
            // The ExpectionFormatter requires access to a couple of protected
            // items so the must be passed in explicitly. The 3rd param
            // controls whether or not the stack trace contains interactive source
            // code. When enabled browser performance is degradded. It will default
            // to false if the 3rd param is not provided
            ExceptionFormatter::display(
                $this->_getParam('error_handler'),
                $this->_helper,
                true
            );
        } else {
            $errors = $this->_getParam('error_handler');
            switch ($errors->type) {
                case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
                    case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                        // 404 error -- controller or action not found
                        $this->getResponse()->setHttpResponseCode(404);
                        $this->view->message = 'Page not found';
                        break;
                    default:
                        // application error
                        $this->getResponse()->setHttpResponseCode(500);
                        $e = $this->_getParam('error_handler');
                        $this->view->message = $e['exception']->getMessage();
                        break;
                    }
                    $this->view->environment = $environment;
                    $this->view->exception = $errors->exception;
                    $this->view->request = $errors->request;
        }
    }
}

关于zend-framework - Zend Framework 应用程序 - 在生产模式下显示 404 错误页面/通用错误页面并在开发模式下显示异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2408467/

相关文章:

php - 将变量从一个 Controller Action 传递到另一个

zend-framework - 我可以在 Zend Framework 中使用普通 (html) 表单吗?

java - 将有用的状态信息传递给 Java 中的异常的好方法是什么?

http - 如果通过代理请求页面会出现 404 错误,但如果直接连接则会出现 200

php - 使用 zend framework 1.7.4 上传文件

PHP Zend Framework 2 - 呈现表单时出现问题 - "form plugin not found"

java - Android应用-无法启动 Activity ComponentInfo

php - 在下拉式表单上显示表单错误

WordPress RSS Feed 返回 404

html - Angular 6 无法从 Assets 加载图像