我正试图用相同的代码记录每个控制器的操作:
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 yiibaseActionEvent;
use yiibaseController;
use yiibaseEvent;
$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);
});
},
...
],
...
];