Php 找不到视图文件时,Yii错误处理程序不工作
我已经在我的Yii站点中设置了错误处理程序 这是代码 main.phpPhp 找不到视图文件时,Yii错误处理程序不工作,php,yii,error-handling,Php,Yii,Error Handling,我已经在我的Yii站点中设置了错误处理程序 这是代码 main.php 'errorHandler'=>array( // use 'site/error' action to display errors 'errorAction'=>'site/error', ), public function actionError() { if ($error = Yii::app()->errorHandler->error)
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>'site/error',
),
public function actionError() {
if ($error = Yii::app()->errorHandler->error) {
if (Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
$this->render('error', $error);
}
}
<?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>
SiteController.php
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>'site/error',
),
public function actionError() {
if ($error = Yii::app()->errorHandler->error) {
if (Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
$this->render('error', $error);
}
}
<?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>
site/error.php
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>'site/error',
),
public function actionError() {
if ($error = Yii::app()->errorHandler->error) {
if (Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
$this->render('error', $error);
}
}
<?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错误或用户调用错误的函数,它工作正常并重定向到此自定义错误页面。
例如,如果在site controller中我设置了contact
功能,并且用户像这样调用URLlocalhost.com/site/contactsdffe
,那么它将重定向到此自定义错误页面
但问题就在这里。
如果控制器函数调用view contact,而我还没有设置views/site/contact.php视图,那么它就不会被称为这个自定义错误页面。
它给了我一个异常错误的提示
CEException:SiteController找不到请求的视图“联系人”
我不知道为什么错误处理程序不适用于这种情况,请告诉我如何显示此类错误的自定义错误页面
任何帮助都将不胜感激。提前谢谢 要使用
site/error
进行ceexception
切换,请在输入脚本中将YII_DEBUG
设置为false(可能是项目根目录中的index.php
)
要使用自定义异常页面,请将自定义视图exception.php
添加到protected/views/system
文件夹中
从(我的)重点:
Yii定义了三个异常类:ceException
、cdbeException
和CHttpException
CException
是一个通用异常类CDbException
表示由某些与数据库相关的操作引起的异常CHttpException
表示应向最终用户显示的异常,并带有表示HTTP状态代码的statusCode
属性。异常的类决定了它应该如何显示,我们将在下面解释
当错误被转发到CErrorHandler
应用程序组件时,它会选择一个适当的视图来显示错误。如果要向最终用户显示错误,例如CHttpException
,它将使用名为errorXXX
的视图,其中XXX
表示HTTP状态代码(例如400、404、500)如果错误是内部错误,并且只应向开发人员显示,则它将使用名为异常
的视图。在后一种情况下,将显示完整的调用堆栈以及错误行信息
当应用程序在生产模式下运行时,包括那些内部错误在内的所有错误都将使用viewerrorXXX
显示。这是因为错误的调用堆栈可能包含敏感信息。在这种情况下,开发人员应该依赖错误日志来确定错误的真正原因
CErrorHandler按以下顺序搜索与视图对应的视图文件:
:这是当前活动主题下的系统视图目录WebRoot/themes/ThemeName/views/system
:这是应用程序的默认系统视图目录WebRoot/protected/views/system
:这是yii框架提供的标准系统视图目录yii/framework/views
CHttpException
,并返回404的HTTP状态。对于第二个实例,url正确解析,因此会发生内部错误并引发CException