backpack / activity-log
Backpack 活动日志
Requires
- backpack/crud: ^6.0
- spatie/laravel-activitylog: ^4.7
Requires (Dev)
- orchestra/testbench: ~5|~6
- phpunit/phpunit: ~9.0
This package is auto-updated.
Last update: 2024-09-16 09:34:54 UTC
README
是否曾想查看谁何时更改了您的应用程序中的哪些内容?想记住用户所做的所有数据库更改?嗯...这个包做不到这一点。 spatie/laravel-activitylog
可以,而且做得很好。这个包为使用 Backpack for Laravel 的项目添加了网页界面。它使您的管理员/超级管理员能够看到
- 特定模型执行的各项活动;
- 在特定模型上执行的各项活动;
- 等等;
这一切是如何工作的?嗯
- 当一个 Eloquent 模型发生变化时,Spatie 包会在数据库中记录它;
- 此包添加了一个网页界面,因此管理员可以看到更改(即活动日志);
预览
注意:过滤器是 Backpack\PRO 功能的一部分。如果您没有该包,则过滤器将不可用。
演示
现在就在我们的在线演示中试试吧,这里。编辑一些实体,并检查 活动日志。
安装
在您的 Laravel + Backpack 项目中,安装此包
# install this interface package: composer require backpack/activity-log # add a menu item for it php artisan backpack:add-menu-content "<x-backpack::menu-item title=\"Activity Logs\" icon=\"la la-stream\" :link=\"backpack_url('activity-log')\" />"
但还要,如果您包中尚未安装并设置 spatie/laravel-activitylog
,请 按照他们的文档中的安装步骤进行。我们也会在这里复制粘贴它们,以便您方便使用。
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-config" php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-migrations" php artisan migrate
用法
注意:如果您的模型尚未配置为创建活动日志,请 阅读有关如何记录所有模型事件的常见问题解答。如果您不确定,那么您尚未配置它们记录活动 - 请阅读。
活动日志列表视图
使用它来浏览所有活动、筛选视图、搜索视图等。
活动日志显示视图
使用它来查看特定活动的详细信息。
CrudController 操作
如果您想使您的 CrudControllers 显示指向其活动的链接,只需使用提供的 Backpack 操作之一或两个即可。
- ModelActivityOperation:显示一个通用按钮,允许用户查看该模型的所有活动列表。
- EntryActivityOperation:为列表中的每个条目添加行按钮,使用户能够查看特定条目的活动日志。
ModelActivityOperation - 在 CrudController 中显示指向该模型活动日志的链接
假设您有一个 UserCrudController
。如果您想在 “添加用户”按钮 旁边显示一个新按钮,该按钮将带您进入所有用户的全部活动,请使用 \Backpack\ActivityLog\Http\Controllers\Operations\ModelActivityOperation
在您的 UserCrudController
中。
<?php
namespace App\Http\Controllers\Admin;
...
class ArticleCrudController extends CrudController
{
...
+ use \Backpack\ActivityLog\Http\Controllers\Operations\ModelActivityOperation;
...
EntryActivityOperation - 在 CrudController 中显示指向每个条目活动日志的链接
假设你有一个 UserCrudController
。如果你想在每个条目旁边显示一个新的按钮,点击后可以查看该条目的所有活动,那么在你的 UserCrudController
中使用 \Backpack\ActivityLog\Http\Controllers\Operations\EntryActivityOperation
。
<?php
namespace App\Http\Controllers\Admin;
...
class ArticleCrudController extends CrudController
{
...
+ use \Backpack\ActivityLog\Http\Controllers\Operations\EntryActivityOperation;
...
链接选项 - 主题 / 触发者
ModelActivityOperation
和 EntryActivityOperation
按钮将指向活动日志页面,当前模型作为 主题。如果你的模型是 触发者(执行操作的个体,通常是 User
模型),你可以将操作选项设置为触发者。
class ArticleCrudController extends CrudController
{
...
public function setup()
{
...
+ CRUD::set('activity-log.options', ActivityLogEnum::CAUSER);
}
常见问题解答
默认情况下记录了什么内容?
默认情况下,不记录任何内容。请根据您的需求配置 spatie/laravel-activitylog
来进行记录。下面的问题将提供最常见的用例。
如何记录模型事件(created
、updated
、deleted
等)
注意:这不是本包提供的功能。这是由
spatie/laravel-activitylog
提供的。但我们尽量记录最常见的用例,以便您更容易实现。
你希望在模型被 created
、updated
、deleted
等操作时注册一个新的活动吗?这样就可以记录谁做了什么,以及何时发生的?以下是设置 spatie/laravel-activitylog
记录所有模型事件的步骤。
步骤 1. 在 App\Models\Traits\LogsActivity.php
创建一个新的模型特质,内容如下
<?php namespace App\Models\Traits; use Spatie\Activitylog\LogOptions; use Spatie\Activitylog\Traits\LogsActivity as OriginalLogsActivity; trait LogsActivity { use OriginalLogsActivity; /** * Spatie Log Options * By default will log only the changes between fillables * * @return LogOptions */ public function getActivitylogOptions(): LogOptions { return LogOptions::defaults()->logAll()->logOnlyDirty(); } }
步骤 2. 在所有需要记录所有事件模型的模型上使用该特质
<?php namespace App\Models; +use App\Models\Traits\LogsActivity; use Backpack\CRUD\app\Models\Traits\CrudTrait; class Article extends Model { use CrudTrait; + use LogsActivity; ...
注意,此特质扩展了默认的 Spatie\Activitylog\Traits\LogsActivity
并定义了 getActivitylogOptions()
方法,提供了一些合理的默认值。如果您需要自定义,请参阅 此处详情 和 此处选项。
如何自定义记录的内容?
要自定义记录的信息,您可以在模型中重写 getActivitylogOptions
方法。
public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logFillable() ->logOnlyDirty(); }
我可以进一步自定义日志吗?
是的,您可以!Spatie laravel-activitylog 包提供了一系列高级自定义选项。有关这些选项的详细信息,请参阅 Spatie 官方日志选项文档,见 https://spatie.be/docs/laravel-activitylog/v4/api/log-options
我正在使用 backpack/permission-manager
,因此我没有访问 UserCrudController
如果您尚未自定义您的 UserCrudController
,您可以通过将 Backpack 控制器绑定到您自定义的控制器来实现此操作。在您的 App\Providers\AppServiceProvider.php
class AppServiceProvider extends ServiceProvider { public function register() { $this->app->bind( \Backpack\PermissionManager\app\Http\Controllers\UserCrudController::class, \App\Http\Controllers\Admin\UserCrudController::class );
然后在您的 App\Http\Controllers\Admin\UserCrudController.php
中,您可以这样做
use Backpack\PermissionManager\app\Http\Controllers\UserCrudController as OriginalUserCrudController; class UserCrudController extends OriginalUserCrudController { use \Backpack\ActivityLog\Http\Controllers\Operations\ModelActivityOperation; use \Backpack\ActivityLog\Http\Controllers\Operations\EntryActivityOperation; }
安全
如果您发现任何安全相关的问题,请通过电子邮件发送到 cristian.tabacitu@backpackforlaravel.com 而不是使用问题跟踪器。
鸣谢
许可证
本项目在 MIT 许可证下发布,因此您可以将其安装在任何 Backpack & Laravel 项目上。有关更多信息,请参阅 许可证文件。