【问题标题】:Yii Error Handler does not work while view file is not foundYii 错误处理程序在未找到视图文件时不起作用
【发布时间】:2016-08-30 20:25:22
【问题描述】:

我已经在我的 Yii 站点中设置了错误处理程序。

这里是代码。

ma​​in.php

'errorHandler'=>array(
        // use 'site/error' action to display errors
        'errorAction'=>'site/error',
),

SiteController.php

public function actionError() {
        if ($error = Yii::app()->errorHandler->error) {
            if (Yii::app()->request->isAjaxRequest)
                echo $error['message'];
            else
                $this->render('error', $error);
        }
    }

site/error.php

<?php
    $this->pageTitle=Yii::app()->name . ' - Error';
    $this->breadcrumbs=array(
        'Error',
    );
?>

<h2>Error <?php echo $code; ?></h2>

<div class="error">
    <?php echo CHtml::encode($message); ?>
</div>

如果 URL 错误或用户调用错误函数,它工作正常并重定向到此自定义错误页面。 例如,如果在站点控制器中我设置了contact 函数并且用户调用这样的 URL localhost.com/site/contactsdffe 然后它会重定向到这个自定义错误页面。

但问题就在这里。

如果控制器函数调用视图联系人并且我没有设置views/site/contact.php 视图,那么它不会被称为这个自定义错误页面。 它给了我这个异常错误。

CException : SiteController 找不到请求的视图“联系人”。

我不知道为什么错误处理程序不适用于这种情况,请告诉我如何为这种错误显示自定义错误页面。

任何帮助将不胜感激。提前致谢!

【问题讨论】:

    标签: php yii error-handling


    【解决方案1】:

    要将site/error 用于CException 切换到production mode,方法是在您的输入脚本中将YII_DEBUG 设置为false(可能是项目根目录中的index.php)。

    要使用自定义异常页面,请将自定义视图 exception.php 添加到您的 protected/views/system 文件夹中。

    来自Yii guide page on errors(强调我的):

    Yii 定义了三个异常类:CExceptionCDbExceptionCHttpExceptionCException 是一个通用异常类。 CDbException 表示由某些 DB 相关操作引起的异常。 CHttpException 表示应向最终用户显示的异常,并带有表示 HTTP 状态代码的 statusCode 属性。异常的类决定了它应该如何显示,我们将在下面解释。

    当错误被转发到CErrorHandler 应用程序组件时,它会选择适当的视图来显示错误。如果要向最终用户显示错误,例如CHttpException,它将使用名为errorXXX 的视图,其中XXX 代表HTTP 状态代码(例如400、404、500)。 如果错误是内部错误并且应该只显示给开发人员,它将使用名为 exception 的视图。在后一种情况下,将显示完整的调用堆栈以及错误行信息。

    当应用程序在生产模式下运行时,包括那些内部错误在内的所有错误都将使用视图errorXXX 显示。这是因为错误的调用堆栈可能包含敏感信息。在这种情况下,开发人员应该依靠错误日志来确定错误的真正原因。

    CErrorHandler按以下顺序搜索视图对应的视图文件:

    • WebRoot/themes/ThemeName/views/system:这是当前活动主题下的系统视图目录。

    • WebRoot/protected/views/system:这是应用程序的默认系统视图目录。

    • yii/framework/views: 这是 Yii 框架提供的标准系统视图目录。

    在第一个实例中,Yii 在解析 url 期间抛出 CHttpException 并返回 HTTP 状态 404。对于第二个实例,url 正确解析,因此发生内部错误并抛出 CException

    【讨论】:

      猜你喜欢
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多