rejtg21/activitylog

Spatie增强的活动日志记录器,用于监控您的网站或应用的用户

2.4.5 2016-07-13 07:23 UTC

README

Latest Version Software License Build Status SensioLabsInsight Total Downloads

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)。有关更多信息,请参阅许可文件