php - yii2 : How to Customize Error Pages like 404 and 503

标签 php yii2

我有以下 errorHandler 配置

'errorHandler' => [
    'errorAction' => 'page/error',
],

在 Controller 页面中,在我想检查的操作错误中,我收到了 404 错误“找不到页面”?

如何检查?

最佳答案

如果您尝试自定义Error page并且想要在 View 内单独获取错误代码,那么您有 $exception , $name$message View 内可用的变量,但以防万一您使用 yii\web\ErrorAction ,在我继续之前,您需要了解自己属于哪一类。

案例 1 使用\yii\web\ErrorAction

  1. 在您的 PageController 内你应该有一个actions()功能如下。

    public function actions() {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction' ,
            ] 
        ];
    }
    
  2. 如果您现在还没有为添加错误创建单独的布局,最好将错误布局分开。只需复制 layouts/main.php并删除所有额外的 CSS 和 js 文件或创建 frontend/assets/ErrorAsset.php并在布局文件顶部注册。

  3. 添加beforeAction() PageController 内的函数像下面这样。

    示例代码

    public function beforeAction( $action ) {
        if ( parent::beforeAction ( $action ) ) {
    
             //change layout for error action after 
             //checking for the error action name 
             //so that the layout is set for errors only
            if ( $action->id == 'error' ) {
                $this->layout = 'error';
            }
            return true;
        } 
    }
    
  4. 现在您已指定 'page/error'在你的errorHandler里面组件的配置,因此操作名称为 error View 文件也是如此,该 View 文件应该位于 page 内文件夹这应该是路径 page/error.php 。你有$exception可用变量保存您案例中的异常对象 yii\web\NotFoundHttpException目的。您可以调用$exception->statusCode要检查异常抛出了哪个状态代码,在您的情况下,它将显示 404 .


案例 2 使用自定义操作显示错误

另一种方法是在 Controller 内使用自定义操作,而不是使用 yii\web\ErrorAction在这种情况下,您不需要添加 actions()函数并在您应该调用的自定义错误函数内

$exception  =   Yii::$app->getErrorHandler()->exception; 

并使用$exception->statusCode 。确保检查 beforeAction() 中的确切操作名称函数相应地更改您的支票行

if ( $action->id == 'error' ) {
<小时/>

案例 3 闭嘴,给我一个异常(exception)

如果您不想要上述任何内容,只想检查 Controller beforeAction() 内的异常代码您必须访问相同的 exception上面的对象,但通过配置的 erorHandler 进行简写组件。

public function beforeAction($action) {

    $exception = Yii::$app->getErrorHandler()->exception;

    if(parent::beforeAction($action)) {
        $hasError = $action->id == 'error' && $exception !== NULL;

        if($hasError) {
            echo $exception->statusCode;
            return false;
        }
    }
    return true;
}

关于php - yii2 : How to Customize Error Pages like 404 and 503,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321461/

相关文章:

php - 怎么了?(Wordpress(HTML/CSS))

php - Chrooted PHP-FPM脚本过一会儿无法解析DNS

mysql - WHERE in(子查询)子句 yii

mysql - 如何将变量从javascript传递给yii2函数

mysql - Yii2使用ActiveRecord建立三个表之间的关系

php - 使用 Yii2 迁移添加多个附加列

php - 将 Laravel 包含到自定义 PHP 脚本中并路由到 Controller

PHP在没有循环的情况下重置数组的第一级

php - 从数据库中获取两个日期之间的数据

yii2 - Yii Gridview 在过滤记录时显示/隐藏界面中的列