Задать вопрос
abler98
@abler98
Software Engineer

Yii2 — как изменить сообщение об ошибке 403 и т.п.?

Как изменить вот это сообщение?
9929fc51433143fbb457ef8ea2c4cf72.png
Вот так ничего не меняется
public function behaviors() {
		return [
			'access' => [
				'class' => AccessControl::className(),
				'rules' => [
					[
						'allow' => true,
						'roles' => ['admin'],
						'denyCallback' => function ($rule, $action) {
							throw new ForbiddenHttpException('У Вас нет доступа');
						},
					],
				],
			],
		];
	}
  • Вопрос задан
  • 6021 просмотр
Подписаться 4 Оценить Комментировать
Решения вопроса 1
DexterHD
@DexterHD
Software Engineer, Teamlead, CTO
Посмотрите SiteController.php. Там есть метод:
public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
           ...
        ];
    }


Обработчиком по умолчанию является класс: yii\web\ErrorAction
Вам нужно в данном классе ( SiteController.php ) убрать код:
'error' => [
                'class' => 'yii\web\ErrorAction',
            ],

И реализовать свой метод с именем actionError. Или же реализовать его отдельным классом по аналогии с yii\web\ErrorAction
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
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']
          ],
        ],
      ],
    ];
  }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы