2

在应用程序登录中,我有以下代码会引发...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.');
      }
    }

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

4

2 回答 2

4

来自Mihai P.(谢谢)的回答,我得到了这个答案。我打开了错误类的文件,vendor\yiisoft\yii2\web\ErrorAction.php发现它有一个公共属性供查看,所以我决定使用它,因此我在方法的error数组中定义了它,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;

视图中的三个变量$name, $message and $exception由 ErrorAction 对象提供,它们可以在该文件的最后几行中找到

...
else {
            return $this->controller->render($this->view ?: $this->id, [
                'name' => $name,
                'message' => $message,
                'exception' => $exception,
            ]);
        }
...
于 2015-02-05T00:15:39.360 回答
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 并将它放在那里。

于 2015-02-04T23:38:19.393 回答