我想显示404错误页面,因为我在protected / view / system文件夹中创建了error404.php文件。
默认情况下,我有Sitecontroller,它包含错误动作功能,如下所示
public function actionError()
{
if($error=Yii::app()->errorHandler->error)
{
if(Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
$this->render('error', $error);
}
}
在主配置文件中,它被定义为
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>'site/error',
),
我的问题是我只需要自定义404页面,其余的错误我需要处理它由sitecontroller的错误函数处理的方式。但我找不到办法做到这一点。如果我想删除'errorAction'=>'site / error',从config main那么它确实通过调用显示404错误
throw new CHttpException(404, 'Page not found');
但这样做我只能看到没有布局的页面,其他自定义错误被视为404,而不是。我多次阅读本手册,但我仍然无法解决它。
使用此代码 actionError:
$app = Yii::app();
if( $error = $app->errorHandler->error->code )
{
if( $app->request->isAjaxRequest )
echo $error['message'];
else
$this->render( 'error' . ( $this->getViewFile( 'error' . $error ) ? $error : '' ), $error );
}
在views / site中创建 error404.php 对于404错误和 error.php 对于其余的。
或者您可以在配置中定义param,以获取您希望以不同方式处理的错误并检查错误代码:
$app = Yii::app();
if( $error = $app->errorHandler->error->code )
{
if( Yii::app()->request->isAjaxRequest )
echo $error['message'];
else
$this->render( 'error' . ( in_array( $error, $app->params[ 'customErrorPages' ] ) ? $error : '' ), $error );
}
错误处理程序的工作方式如下:当httpexception出现时,组件将检查是否有任何值 errorAction 属性,如果有,将运行此控制器的操作。如果没有设定值 errorAction 属性,将显示系统文件夹中的错误视图。因此,无需在系统视图文件夹和控制器的视图文件夹中混合错误视图。
使用此代码 actionError:
$app = Yii::app();
if( $error = $app->errorHandler->error->code )
{
if( $app->request->isAjaxRequest )
echo $error['message'];
else
$this->render( 'error' . ( $this->getViewFile( 'error' . $error ) ? $error : '' ), $error );
}
在views / site中创建 error404.php 对于404错误和 error.php 对于其余的。
或者您可以在配置中定义param,以获取您希望以不同方式处理的错误并检查错误代码:
$app = Yii::app();
if( $error = $app->errorHandler->error->code )
{
if( Yii::app()->request->isAjaxRequest )
echo $error['message'];
else
$this->render( 'error' . ( in_array( $error, $app->params[ 'customErrorPages' ] ) ? $error : '' ), $error );
}
错误处理程序的工作方式如下:当httpexception出现时,组件将检查是否有任何值 errorAction 属性,如果有,将运行此控制器的操作。如果没有设定值 errorAction 属性,将显示系统文件夹中的错误视图。因此,无需在系统视图文件夹和控制器的视图文件夹中混合错误视图。
每当发生错误时,都会调用siteController中的操作错误。您可以在该操作中自定义错误路由,您可以执行以下操作:
if(404==Yii::app()->errorHandler->error->code){
//go to custome error page
else
//code default error.php
你不能用.htaccess做到这一点吗?我个人创建一个“错误”文件夹,其中包含所有包含错误消息的html php文件,并修改.htaccess以在遇到错误时调用这些页面。
链接:
http://www.javascriptkit.com/howto/htaccess2.shtml
http://www.addedbytes.com/for-beginners/error-documents-for-beginners/
例子:
在要调用错误页面的目录中创建.htaccess文件,并在文本文件中写入以下行:
ErrorDocument 404 /404.html
假设在同一目录中有一个名为404.html的页面,当生成404页面未找到错误时,将调用404.html页面。
同样适用于其他错误代码:
ErrorDocument 500 /500error.html
假设创建了500错误,并且同一目录中存在500error.html文件。
在最新版本的框架中(我正在使用1.14)使用:
Yii::app()->errorHandler->error['code']
因为 错误 是一个数组。