Yii2:自定义错误页面

时间:2018-01-18 12:31:49

标签: yii2

我有以下配置的errorHandler

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

在Controller页面中,在我要检查的操作错误中,我收到404错误"找不到页面"?

我该如何检查?

1 个答案:

答案 0 :(得分:3)

如果您尝试自定义Error page并希望在视图中单独获取错误代码,那么您可以使用$exception$name$message个变量视图,但如果您使用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,因此视图文件也是如此,此视图文件应为在page文件夹中,这应该是路径page/error.php。您有$exception变量可用于保存案例yii\web\NotFoundHttpException对象中的异常对象。并且您可以致电$exception->statusCode来检查针对该例外引发的状态代码,在您的情况下,它会显示404

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

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

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

    并使用$exception->statusCode。请务必检查beforeAction()功能内部的确切操作名称,并相应地更改支票

    if ( $action->id == 'error' ) {
    

    CASE 3 SHUTUP只是给我一个例外`

    如果您不想要上述任何内容,只想查看控制器beforeAction()内的异常代码,则必须访问上面的exception对象,但需要通过config {{1组件。

    erorHandler