YII2 выполнение кода в каждом контроллере
В продолжении темы примитивного логгирования. Понадобилось записывать, какой пользователь открывает какие страницы. И если с клиентским отображением в принципе ничего сложного, просто вставил в /view/layouts/main.php код вида:
|
1 2 3 4 5 |
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 (требуется создать папку если нет):
|
1 2 3 4 5 6 7 8 9 10 11 |
<?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 строчки:
|
1 2 3 4 5 6 7 |
... 'bootstrap' => ['log','Logging_at_start'], ... 'components' => [ 'Logging_at_start'=>[ 'class'=>'app\components\Logging_at_start' ], |
Плюс добавил сохранение сессии в константу sess в web/index.php
Итого, в логах теперь красуется всё то нужно:
