gpt4 book ai didi

php - YII 如何处理自定义 404 错误页面以及其他错误页面

转载 作者:可可西里 更新时间:2023-10-31 22:12:06 25 4
gpt4 key购买 nike

我想显示 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”=>“站点/错误”,那么它确实会通过调用

显示 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 中为 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 属性中是否有任何值,如果有,将运行此 Controller 的操作。如果 errorAction 属性没有设置值,将从系统文件夹显示错误 View 。因此无需混合来自系统 View 文件夹和 Controller View 文件夹的错误 View 。

关于php - YII 如何处理自定义 404 错误页面以及其他错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com