Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (2)

Лучшие ответы пользователя

Все ответы (3)
  • Yii2 - как изменить сообщение об ошибке 403 и т.п.?

    dmitrytyt
    @dmitrytyt
    Дополню своим ответом.
    При использовании таких настроек в SiteController.php у меня появляется код ошибки 500
    Это происходит, когда у пользователя нет роли admin.
    public function behaviors() {
        return [
          'access' => [
            'class' => AccessControl::className(),
            'rules' => [
              [
                'allow' => true,
                'roles' => ['admin']
              ],
            ],
          ],
        ];
      }
    
    /**
         * {@inheritdoc}
         */
        public function actions()
        {
            return [
                'error' => [
                    'class' => ErrorAction::class,
                    // Тут можно добавить свой шаблон. 
                    // Или ничего не указывать, при этом будет использоваться тот, который прописан в 'errorHandler'
                    'view' => 'site/error', 
                    'layout' => 'error'
                ]
            ];
        }


    И сообщение:

    An Error occurred while handling another error:
    yii\web\ForbiddenHttpException: Вам не разрешено производить данное действие. in \vendor\yiisoft\yii2\filters\AccessControl.php:158


    Оказывается, что дело не доходит до 403 ошибки. Оно прерывается раньше.

    Решение добавить исключение для контроллера error:
    public function behaviors() {
        return [
          'access' => [
            'class' => AccessControl::className(),
            'except' => ['error'],
            'rules' => [
              [
                'allow' => true,
                'roles' => ['admin']
              ],
            ],
          ],
        ];
      }


    или
    public function behaviors() {
        return [
          'access' => [
            'class' => AccessControl::className(),
            'rules' => [
             [
                 'actions' => ['error'],
                 'allow' => true,
              ],
              [
                 'allow' => true,
                 'roles' => ['admin']
              ],
            ],
          ],
        ];
      }
    Ответ написан