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
Итого, в логах теперь красуется всё то нужно:


