В логине приложения у меня есть следующий код ...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 чтобы найти какие-либо параметры, которые могут определить представление в конструкции объекта, но я не смог найти это. Итак, есть ли способ настроить вид исключения?
От Михай П. (Спасибо) ответ, у меня есть этот ответ. Я открыл файл класса ошибок в 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,
]);
}
...
Если вы посмотрите здесь 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 и поместить его туда.