yii自定义错误页面,如404403500

yii自定义错误页面,如404403500,yii,Yii,我正在尝试为所有错误消息创建单独的文件。(404403500等)这样我就可以为他们定制设计了。如果可能的话,我不希望页眉和页脚也包含在我的错误页面中。现在我在我的SiteController.php中有这个,并将error404.php放入我的views/site/文件夹中 public function actionError() { $error = Yii::app()->errorHandler->error;

我正在尝试为所有错误消息创建单独的文件。(404403500等)这样我就可以为他们定制设计了。如果可能的话,我不希望页眉和页脚也包含在我的错误页面中。现在我在我的SiteController.php中有这个,并将error404.php放入我的views/site/文件夹中

public function actionError()
        {
                $error = Yii::app()->errorHandler->error;
                switch($error['code'])
                {
                        case 404:

                                $this->render('error404', array('error' => $error));
                                break;
                        .......
                        .......
                }
        }
我想知道有没有更好的办法?或者如果我有办法处理我错过的事情

我读了这一页


它说了一些关于将文件放入
/protected/views/system
的内容,但我不太理解Yii的文档。

当您阅读Yii时,我会在
/protected/views/system
中查找文件(如果您有主题,请先查看主题)

您不需要编写任何新操作,只需在views目录中创建一个文件夹系统,并创建名为errorXXX.php XXX的文件作为错误代码

默认页面如下所示:您可以根据需要修改此页面并将其保存在
/protected/views/system

<body>
     <h1>Error <?php echo $data['code']; ?></h1>
     <h2><?php echo nl2br(CHtml::encode($data['message'])); ?></h2>
     <p>
        The above error occurred when the Web server was processing your request.
     </p>
     <p>
       If you think this is a server error, please contact <?php echo $data['admin']; ?>.
     </p>
     <p>
        Thank you.
     </p>
     <div class="version">
        <?php echo date('Y-m-d H:i:s',$data['time']) .' '. $data['version']; ?>
     </div>
</body>
另一种技术是如何在SiteController中创建操作,但要激活此操作,需要更改主配置文件并将错误路由到此操作:

return array(
    ......
    'components'=>array(
        'errorHandler'=>array(
            'errorAction'=>'site/error',
        ),
    ),
);

如果你只想屏蔽你的错误,那么这是没有必要的,如果你想做更复杂的事情,比如在数据库的错误日志上,发送一封电子邮件给管理员等,然后最好有自己的操作和附加逻辑。

hmm出于某种原因,当我删除
site/error.php
并将eror404.php放入
/protected/views/system
时,它说
SiteController找不到请求的视图“error”这是因为您已将errorHandler配置为调用site/error;仍然在SiteController中的操作正在尝试查找视图文件error.php,该文件已被移动,因此出现错误;您需要删除errorHandler指令;啊好的。知道了。所以,如果我这样做,我就不能将错误记录到DB。基本上它是一个静态文件?当然,您可以在DB/file/email中记录错误,而无需声明您需要配置错误记录配置的自定义操作。有关更多信息,请参阅,infoView文件不会从/protected/views/system呈现
return array(
    ......
    'components'=>array(
        'errorHandler'=>array(
            'errorAction'=>'site/error',
        ),
    ),
);