将每个操作记录到数据库 Yii2

Logging Every Action to Database Yii2

我想将 CRUD 操作或任何其他 activity(例如登录 successful/unsuccessful 尝试和任何用户帐户 creation/deletion 存储到我数据库中的 table,即 TRASACTION_LOG_TABLE.

我写了很多控制器和动作,所以我有任何有效的方法来做 activity 日志。

我如何能够为多个控制器中的每个动作或一组动作执行一个函数来调用该特定函数并向数据库添加一个条目。

您正在寻找Activity日志:

您可以在其中创建一个通用 class 和一个静态方法,例如,

classname::setActivityLog(user_id,activity_msg,time);

并将此代码放入您编写的每个操作中。 例如。 actionUpdate、actionDelete 等

you can get the `user_id` from `Yii::app()->user->id`
put you custom activity message like "User #user_id created new item" etc.
time you can get it while saving into database.

创建一个 table 和类似的模型 ActivityLog.This 是我在我的项目中所做的。

或但这会有限制,比如您不能提供自定义消息或自定义操作名称

您可以创建一个 Class-Level Event Handler in the boostrap process like this (most likely in the web.php configuration file, which holds the configuration for the application 对象):

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