Yii2自定义http例外视图

时间:2015-02-04 22:01:56

标签: php yii2 yii2-advanced-app

在应用程序登录中,我有以下代码将...HttpException抛出到日志记录错误:

// common/models/LoginForm.php which is called from the backend SiteController actionLogin method as $model = new LoginForm();

public function loginAdmin()
    {
      //die($this->getUser()->getRoleValue()."hhh");
      if ($this->getUser()->getRoleValue() >= ValueHelpers::getRoleValue('Admin') && $this->getUser()->getStatusValue() == ValueHelpers::getStatusValue('Active')){
        if ($this->validate()){
          return \Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30:0);         
        }
        else{
          throw new \yii\web\NotFoundHttpException('Incorrect Password or Username.');

        }       
      }
      else{
        throw new \yii\web\ForbiddenHttpException('Insufficient privileges to access this area.');
      }
    }

它工作正常,但我想自定义使用NotFoundHttpExceptionForbiddenHttpException中每个呈现的页面。我试图搜索Yii2 api以找到可能在对象的构造中定义视图的任何参数,但我找不到。那么,有没有办法自定义异常的视图?

2 个答案:

答案 0 :(得分:3)

Mihai P.(谢谢)回答,我得到了这个答案。我在vendor\yiisoft\yii2\web\ErrorAction.php打开了错误类的文件,我发现它有一个公共属性用于查看,因此,我决定使用它,因此我在error数组中定义了它{1}}方法如下:

actions

最后,在public function actions() { return [ 'error' => [ 'class' => 'yii\web\ErrorAction', 'view' => '@common/views/error.php', ], ]; } 文件夹中,我必须创建一个名为common的新文件夹,并使用以下简单代码填充一个名为views的视图文件

error.php

视图<?php $this->title = $name; echo $name; echo "<br>"; echo $message; echo "<br>"; echo $exception; 中的三个变量是从ErrorAction对象提供的,可以在last lines of that file

中找到它们
$name, $message and $exception

答案 1 :(得分:1)

如果你看看https://github.com/yiisoft/yii2-app-advanced/blob/master/frontend/controllers/SiteController.php

您可以看到它使用外部操作来处理错误

/**
     * @inheritdoc
     */
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }

您可以创建自己的ErrorAction文件,扩展默认值并使用您的,而不是Yii中的默认值,或者只是注释掉该操作并创建一个正常的actionError并将其放在那里。