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

1

Решение

От Михай П. (Спасибо) ответ, у меня есть этот ответ. Я открыл файл класса ошибок в 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,
]);
}
...
3

Другие решения

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

1

По вопросам рекламы [email protected]