В yii2 только разбираюсь, поэтому может какие-то шаги были не верные.
Ситуация - на сайте есть основная страница - лендинг, остальное доступно после авторизации.
Есть группы пользователей - заказчик, исполнитель, админ.
У пользователя есть 3 статуса - ожидающий активации (wait), зарегистрированный (registered), активный(active).
Статус registered получает заказчик и исполнитель после регистрации. На этом этапе после авторизации этих пользователей должно перекидывать на второй этап регистрации (у каждого типа своя) и, после прохождения которой, они получают статус active и могут пользоваться сайтом.
Как я это реализовал - добавил компонент:
'bootstrap' => ['log', 'bootstrap'],
'components' => [
'bootstrap' => [
'class' => 'app\components\Bootstrap',
'excludeUrls' => ['debug/default/toolbar', 'ajax/specialization-list', 'ajax/city-list', 'logout'],
'redirectUrl' => '/user/default/signup-step2'
],
Код компонента:
<?php
namespace app\components;
use Yii;
use app\components\helpers\User as UserHelper;
use yii\helpers\Url;
class Bootstrap extends \yii\base\Component
{
public $excludeUrls;
public $redirectUrl;
public function init()
{
$this->redirectUrl = Url::to([$this->redirectUrl]);
$excludeUrls[] = ltrim($this->redirectUrl, '/');
foreach ($this->excludeUrls as $url) {
$excludeUrls[] = Url::to($url);
}
$currentUrl = Yii::$app->request->getPathInfo();
$currentUrl = (empty($currentUrl)) ? '/' : $currentUrl;
if (!Yii::$app->user->isGuest && Yii::$app->user->identity->status == UserHelper::STATUS_REGISTERED
&& in_array(Yii::$app->user->identity->type, [UserHelper::TYPE_CUSTOMER, UserHelper::TYPE_STAFF])
&& !in_array($currentUrl, $excludeUrls)
) {
Yii::$app->response->redirect($this->redirectUrl, 301)->send();
}
}
}
Опишу словами - компонент отрабатывает только в случае, если пользователь авторизован.
После при каждой загрузке страницы проверяем, что если статус равен registered, то кидаем пользователя на второй этап регистрации.
После прохождения второго этапа пользователю ставится статус active и его больше не должен беспокоить этот редирект.
Еще реализованы исключения страниц, которые перечислены в параметре excludeUrls, т.к. в форме 2 этапа регистрации есть поля с автокомлпитом, исключен путь загрузки панели для дебага и функция выхода.
Вопрос 1 - насколько такая реализация нормальная? В том плане, что эти проверки делаются при загрузке каждой страницы, насколько это плохо и есть ли другие варианты реализации?
Вопрос 2 - на некоторых страницах я наблюдаю следующую ошибку “Not Found (#404): Unable to find debug data tagged with ‘54e1d4507d50e’.”, т.е. невозможно подгрузить debug панель по определенному тегу. Ошибку удается убрать, если в моем компоненте Bootstrap убрать обращения к “Yii::$app->user”. При том такая ошибка возникает на 1 странице из 20-30, что и побудило попросить помощи в поиске проблемы.
В чем может быть причина? На чем завязан хэш тега, который запрашивается для дебажной панели, может причина кроется в этой области?
При том что интересно, если напрямую открыть напрямую ссылку
/debug/default/toolbar?tag=54e1d4507d50e, то ошибка уже пропадает и выводится код панели.
Заранее спасибо за любые замечания и подсказки в решении проблемы.