我试图用相同的代码记录每个控制器的动作:
public function afterAction($action, $result)
{
\Yii::$app->logger->write(0, $action->controller->id, $action->id);
return parent::afterAction($action, $result);
}
但是,我不希望在每个控制器上重新启用此方法,并且我不想使用相同方法的某些BaseController。 我知道,base / Controller有AfterAction事件,但是如何使用他的事件处理程序来记录控制器动作?
答案 0 :(得分:1)
您可以像这样在Class-Level Event Handler进程中创建boostrap(最有可能在web.php配置文件中保存configuration for the application对象):
use yii\base\ActionEvent;
use yii\base\Controller;
use yii\base\Event;
$config = [
...
'bootstrap' => [
...
function () {
Event::on(Controller::className(), Controller::EVENT_AFTER_ACTION, function (ActionEvent $event) {
Yii::info('Called controller/action: ' . $event->action->id . '/' . $event->action->controller->id);
});
},
...
],
...
];