Yii2:如何记录每个请求的控制器和操作id


Yii2: How to log controller and action id for each request?

我正试图用相同的代码记录每个控制器的操作:

public function afterAction($action, $result)
{
    'Yii::$app->logger->write(0, $action->controller->id, $action->id);
    return parent::afterAction($action, $result);
}

但是,我不想在每个控制器上重新声明这个方法,也不想使用一些具有相同方法的BaseController。我知道,base/Controller有AfterAction事件,但如何使用他的事件处理程序记录控制器的操作?

您可以在boostrap进程中创建一个类级事件处理程序,如下所示(很可能在web.php配置文件中,该文件保存了应用程序对象的配置):

use yii'base'ActionEvent;
use yii'base'Controller;
use yii'base'Event;
$config = [
    ...
    'bootstrap'    => [
        ...
        function () {
            Event::on(Controller::class, Controller::EVENT_AFTER_ACTION, function (ActionEvent $event) {
                Yii::info('Called controller/action: ' . $event->action->id . '/' . $event->action->controller->id);
            });
        },
        ...
    ],
    ...
];