YII2 выполнение кода в каждом контроллере

В продолжении темы примитивного логгирования. Понадобилось записывать, какой пользователь открывает какие страницы. И если с клиентским отображением в принципе ничего сложного, просто вставил в /view/layouts/main.php код вида:

if (isset(Yii::$app->user->identity)){
  if (isset(Yii::$app->user->identity->username)){
    Logger::Log(Yii::$app->user->identity->username." >> ".$_SERVER["REQUEST_URI"]);
  }
};

Но, к сожалению оный не перехватывает вызов страниц, которые завершаются в контроллере. Ну например всякие ajax запросы на странице. Поступил чуть хитрее: создал свой компонент в папке components (требуется создать папку если нет):

<?php
namespace app\components;
use yii\base\Component;
use app\models\Logger;

class Logging_at_start extends Component{
    public function init() {
           Logger::Log(" >> ".$_SERVER["REQUEST_URI"]);
        parent::init();
    }
}   

И добавил/отредактировал в /config/web строчки:

...
'bootstrap' => ['log','Logging_at_start'],
...
    'components' => [
        'Logging_at_start'=>[
            'class'=>'app\components\Logging_at_start'
        ],        

Плюс добавил сохранение сессии в константу sess в web/index.php

Итого, в логах теперь красуется всё то нужно:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.