11

我想显示 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 页面,其余的错误我需要处理站点控制器的错误函数处理的方式。但我找不到办法做到这一点。如果假设我从配置主目录中删除 'errorAction'=>'site/error',那么它会通过调用显示 404 错误

        throw new CHttpException(404, 'Page not found');

但是这样做我只能看到没有布局的页面,其他自定义错误也被视为与 404 相同,而它们不是。我多次阅读手册但我仍然无法解决它。

4

4 回答 4

9

将此代码用于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 );
}

在视图/站点中,为 404 错误创建error404.php ,为其余错误创建error.php 。

或者您可以在配置中为您希望以不同方式处理的错误定义参数并检查错误代码:

$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属性没有设置值,将显示系统文件夹中的错误视图。因此无需混合来自系统视图文件夹和控制器视图文件夹的错误视图。

于 2012-08-05T13:55:46.970 回答
3

每当发生错误时,都会调用 siteController 中的操作错误。您可以在该操作中自定义错误路线,您可以执行以下操作:

if(404==Yii::app()->errorHandler->error->code){
     //go to custome error page
else
   //code default error.php
于 2012-08-05T10:07:52.633 回答
1

在最新版本的框架(我正在使用 1.14)中使用:

Yii::app()->errorHandler->error['code']

因为错误是一个数组。

于 2014-08-18T08:22:48.840 回答
1

你不能用.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 page not found 错误时,将调用 404.html 页面。

这同样适用于其他错误代码:

ErrorDocument 500     /500error.html

假设创建了 500 错误并且同一目录中存在 500error.html 文件。

于 2012-08-05T10:27:16.213 回答