[yii2] Проблема с debug панелью при использовании \yii\base\Component до запуска сценария.

В 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, то ошибка уже пропадает и выводится код панели.

Заранее спасибо за любые замечания и подсказки в решении проблемы.

А файл с хешем из сообщения об ошибке в папке runtime/debug имеется?

У меня такая ситуация была из-за того, что в Yii::info($arrayObj) попал большой массив объектов. Из за этого файл дебага не мог сформироваться и выдавалась подобная ошибка.