rejtg21 / activitylog
Spatie增强的活动日志记录器,用于监控您的网站或应用的用户
Requires
- php: >=5.4.0
- illuminate/support: 5.*
Requires (Dev)
- mockery/mockery: 0.9.*
- phpunit/phpunit: ~4.0
README
EOL警告
此包已于2016年7月28日废弃。请使用 laravel-activitylog 代替。
描述
此Laravel 5包提供了一个非常易于使用的解决方案,用于记录您的Laravel 5应用的用户的操作。所有活动都将记录在一个数据库表中。可选地,活动也可以记录到默认的Laravel日志处理器。
Spatie是比利时安特卫普的一家网页设计公司。您可以在我们的网站上找到所有开源项目的概述 在这里。
注意
如果您使用的是Laravel 4,请查看此包的版本0.3.0。
安装
此包可以通过Composer安装。
composer require rejtg21/activitylog
必须注册此服务提供者。
// config/app.php 'providers' => [ '...', 'Spatie\Activitylog\ActivitylogServiceProvider', ];
您还需要发布并运行迁移,以创建数据库表。
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations"
php artisan migrate
Activitylog还提供了一个门面,它提供了一个调用它的简单方式。
// config/app.php 'aliases' => [ ... 'Activity' => 'Spatie\Activitylog\ActivitylogFacade', ];
可选地,您可以发布此包的配置文件。
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="config"
配置将写入 config/activitylog.php
。提供的选项是自我解释的。
使用
手动记录
记录某些活动非常简单。
//at the top of your file you should import the facade. use Activity; ... /* The log-function takes two parameters: - $text: the activity you wish to log. - $user: optional can be an user id or a user object. if not proved the id of Auth::user() will be used */ Activity::log('Some activity that you wish to log');
传递给函数的字符串将写入一个数据库表,包括时间戳、用户的IP地址和用户代理。
记录模型事件
此包可以记录您的模型的事件。为了做到这一点,您的模型必须使用 LogsActivity
-特质并实现 LogsActivityInterface
。
use Spatie\Activitylog\LogsActivityInterface; use Spatie\Activitylog\LogsActivity; class Article implements LogsActivityInterface { use LogsActivity; ...
该接口期望您实现 getActivityDescriptionForEvent
-函数。
以下是一个可能的实现示例。
/** * Get the message that needs to be logged for the given event name. * * @param string $eventName * @return string */ public function getActivityDescriptionForEvent($eventName) { if ($eventName == 'created') { return 'Article "' . $this->name . '" was created'; } if ($eventName == 'updated') { return 'Article "' . $this->name . '" was updated'; } if ($eventName == 'deleted') { return 'Article "' . $this->name . '" was deleted'; } return ''; }
此函数的结果将被记录,除非结果是空字符串。
使用前置处理器。
如果您想在某些条件下禁用记录,例如针对特定用户,则在您的应用程序命名空间中创建一个实现了 Spatie\Activitylog\Handlers\BeforeHandlerInterface
的类。
此接口定义了一个 shouldLog($data)
方法,您可以在其中编写任何自定义逻辑以确定是否忽略记录。您必须返回 true
以记录调用。
将命名空间类名添加到配置文件中的 beforeHandler
字段
'beforeHandler' => '\App\Handlers\BeforeHandler',
例如,此回调类可以如下所示来禁用ID为1的用户记录
<?php namespace App\Handlers; use Spatie\Activitylog\Handlers\BeforeHandlerInterface; class BeforeHandler implements BeforeHandlerInterface { public function shouldLog($data) { if ($data->user_id == 1) return false; return true; } }
使用后置处理器。
如果您想在活动保存后执行某些操作,例如将数据也保存到另一个表中,请创建一个实现了 Spatie\Activitylog\Handlers\AfterHandlerInterface
的类。
此接口定义了一个 shouldLogAfter($data)
函数,您可以创建自己的函数来在保存活动后触发。请确保返回从参数接收到的数据。
确保在配置文件中指定命名空间类
'afterHandler' => 'App\Http\Controllers\ActivityController',
例如,
<?php namespace App\Http\Controllers use Spatie\Activitylog\Handlers\AfterHandlerInterface; class ActivityController extends Controller implements AfterHandlerInterface { public function shouldLogAfter($data) { // logic here return $data; } }
您还可以在接口指定的函数的第二参数中添加要传递给函数的数据,它接受作为对象的数组数据。
例如使用上面指定的后置处理器,
首先使用 Activity::log();
$data = [ 'partner_id' => 1 ]; Activity::log('successfully logged', $data);
它将被捕获如下,
public function shouldLogAfter($data) { $data->partner_id; // other logic here return $data; }
如果您想检索在shouldLogAfter
函数中插入的活动,可以使用$data->activity
。
例如,
public function shouldLogAfter($data) { $data->activity->id; $data->activity->ip_address; // model explanation below $data->activity->partner()->attach($data->partner_id); }
注意:在shouldLogAfter()
函数中使用的模型是配置中的默认模型或指定模型。更多信息请见下文。
如果使用Activity::log(),只需将其分配给变量即可。
$activity = Activity::log('successfully logged'); /** * you can already access the object */ $activty->text; $activity->id;
如果想在函数中添加要传递的数据,请在模型中使用特性。它的工作方式如下。
// declare first the variable activityData public $activtyData = []; ... public function getActivityDescriptionForEvent($eventName) { // insert some data $this->activityData = [ 'partner_id' => $this->id, ]; if($eventName == 'created') return 'successfully created'; }
使用您自己的活动模型或扩展Spatie活动模型。
如果您想指定Spatie使用您自己的模型而不是默认模型,可以在配置文件中指定。
'modelPath' => 'App\Models\Activity'
通过指定这一点,您已通知Spatie在整个库中都将使用您的模型。但如果您只想扩展Spatie的模型并添加其他函数,仍然可以做到,只需扩展Spatie模型即可。
<?php namespace App\Models use Spatie\Activitylog\Models\Activity as Spatie; class Activity extends Spatie { public function partner() { return $this->belongsToMany('App\Models\User', 'user_activities', 'activity_id', 'user_id'); } //add other functions here .... }
检索记录的条目
所有事件都将记录在activity_log
表中。此包提供了一个Eloquent模型来操作该表。您可以使用您所熟悉和喜爱的所有正常Eloquent方法。以下是如何获取最后100个活动及其关联的用户的方法。
use Spatie\Activitylog\Models\Activity; $latestActivities = Activity::with('user')->latest()->limit(100)->get();
清理日志
随着时间的推移,您的日志会不断增长。要清理数据库表,可以运行以下命令。
Activity::cleanLog();
默认情况下,超过2个月的记录将被删除。月份的数量可以在包的配置文件中修改。
贡献
有关详细信息,请参阅贡献指南。
安全
如果您发现任何安全相关的问题,请通过电子邮件freek@spatie.be联系,而不是使用问题跟踪器。
鸣谢
关于Spatie
Spatie是比利时安特卫普的一家网页设计公司。您可以在我们的网站上找到所有开源项目的概述 在这里。
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。