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

时间:2016-04-04 14:24:38

标签: php events event-handling yii2

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

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

但是,我不希望在每个控制器上重新启用此方法,并且我不想使用相同方法的某些BaseController。 我知道,base / Controller有AfterAction事件,但是如何使用他的事件处理程序来记录控制器动作?

1 个答案:

答案 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);
            });
        },
        ...
    ],
    ...
];