PHP/Yii2/Behaviors/EVENT - из поведения отправить гостя на страничку с авторизацией
Создал свое поведение,к примеру, GuestBehavior. Присоединил поведение к базовому контроллеру BaseController. В этом поведении отловил событие EVENT_BEFORE_ACTION методом beforeActions, которое дает нам(мне) возможность сделать какие действия перед началом роутинга
class GuestBehavior extends Behavior
{
public function events() {
return [
Controller::EVENT_BEFORE_ACTION => 'beforeActions',
];
}
public function beforeActions() {
if(Yii::$app->user->isGuest)
//хочу перенаправить гостя на страницу с авторизацией ???? $this->owner->render('login')
else
//ничего не делать, ибо пользователь авторизован
}
Концепция самого фреймворка находиться в процессе изучения, поэтому прошу осведомленных о помощи. Пытался сделать через $this->owner->render('login') (где owner - есть экземляр компонента, к которому присоединено поведение), но очевидно что это не работает, ибо цикл работы приложения ломается(
Ответы (1 шт):
В Yii2 уже есть готовый фильтр доступа для таких случаев. Называется ACF или класс AccessControl. Его использование интуитивно понятно, а детали и нюансы можно погуглить.
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::class,
'only' => ['login', 'logout', 'signup'],
'rules' => [
[
'allow' => true,
'actions' => ['login', 'signup'],
'roles' => ['?'],
],
[
'allow' => true,
'actions' => ['logout'],
'roles' => ['@'],
],
],
],
];
}
? - гость, @ - авторизованный. Если гость и доступ запрещен, то произойдет перенаправление на страницу авторизации (действие по умолчанию). Более подробно на сайте руководства https://www.yiiframework.com/doc/guide/2.0/ru/security-authorization