Yii2 Пользовательские представления HTTP-исключений

При входе в приложение у меня есть следующий код, который выдает ...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. чтобы найти какие-либо параметры, которые могут определять представление в конструкции объекта, но я не смог этого найти. Итак, есть ли способ настроить вид исключения?


person SaidbakR    schedule 04.02.2015    source источник


Ответы (2)


Из ответа Mihai P. (спасибо) я получил этот ответ. Я открыл файл класса ошибки по адресу vendor\yiisoft\yii2\web\ErrorAction.php< /strong> и я обнаружил, что у него есть общедоступное свойство для просмотра, поэтому я решил использовать его и, следовательно, определил его в массиве 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,
            ]);
        }
...
person SaidbakR    schedule 05.02.2015

Если вы посмотрите здесь 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 и поместить его туда.

person Mihai P.    schedule 04.02.2015
comment
Большое спасибо, ваш ответ вдохновил меня на получение моего ответа. - person SaidbakR; 05.02.2015