2015-02-04 3 views
0

В приложении для входа у меня есть следующий код, который бросить ...HttpException на ошибки лесозаготовительных:Yii2 Пользовательские исключения HTTP просмотров

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

ответ

2

От 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 объект a d они могут быть найдены в last lines of that file

... 
else { 
      return $this->controller->render($this->view ?: $this->id, [ 
       'name' => $name, 
       'message' => $message, 
       'exception' => $exception, 
      ]); 
     } 
... 
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 и поместите его туда.

+0

Спасибо, что ваш ответ вдохновил меня на мой ответ. – SaidbakR

Смежные вопросы