2014-10-06 45 views
1

在我的Laravel应用程序中,它基本上是一些“资源”(客户端,帐户等)的CRUD应用程序,我想创建一个审计日志。这将使我能够看到任何创建,删除或编辑应用程序中的任何资源,何时发生以及哪个用户进行了更改。在Laravel中,创建一个日志来存储资源的所有更改

我开始通过创建以下架构(以及相关的模型Change):

Schema::create('changes', function(Blueprint $table) 
{ 
    $table->increments('id'); 
    $table->dateTime('change_date')->nullable(); //The time the change was made 
    $table->string('model'); // The model the change was made to 
    $table->text('change'); // What was changed (e.g. `name` field for client 10015 was changed from "John" to "Johnny") 
    $table->integer('user_id')->unsigned()->nullable(); // The user who made the change 
    $table->timestamps(); 
}); 

现在,每当一个变化到另一个模型所做的,我想我的应用程序中插入的变化表中的记录。例如。说一个客户端被编辑,一些额外的代码将需要在Client->save()之后运行。喜欢的东西:

$change = new Change; 
$change->user_id = User()->id; 
$change->model = // ? how do I get the name of the model just changed? 
$change->change = 'User 10015 edited: name: "John" -> "Johnny"; active: 1 -> 0;'; // somehow get the fields that were changed. Different for delete and create. 
$change->save(); 

我想我需要做3个过滤器(或事件侦听器?),分别用于创建,编辑和删除。但是,我如何传递所需的数据(如字段和型号名称)?有没有包已经这样做?任何帮助赞赏。

编辑revisionable包似乎做我想要的95% - 只要不记录创建和删除。

+0

http://stackoverflow.com/questions/34726400/laravel-auditing-eloquent-events-or-alternatives – 2016-03-15 14:47:30

+0

http://stackoverflow.com/questions/34726400/laravel-auditing-eloquent-events-or-alternatives – 2016-03-15 14:53:03

回答

0

您可以添加事件侦听器并触发事件。 您可以在start.php文件中注册您的活动或创建一个events.php文件,并要求它在start.php文件中。您也可以通过服务提供商和课程来完成。

例子:

Event::listen('user.change', function($param1, $param2, $optional = null) { 
    // insert a change record here 
}); 

,每当你需要添加一个变化,你只需做这样的事情:

Event::fire('user.change', ['parameter 1', 'parameter 2']); 

很明显,你会改变任何你需要的硬编码参数。