rmsramos / activitylog
这是我打包的 activitylog 包
Requires
- php: ^8.2
- illuminate/contracts: ^10.0||^11.0
- spatie/laravel-activitylog: ^4.8
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- filament/filament: ^3.2
- larastan/larastan: ^2.9
- laravel/pint: ^1.16
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
README
Spatie/Laravel-activitylog for Filament
此包提供了一个 Filament 资源,显示所有活动日志以及使用 spatie/laravel-activitylog
包创建的每个日志的详细视图。它还提供了相关模型的关系管理器。
需求
- Laravel v11
- Filament v3
- Spatie/Laravel-activitylog v4
支持的语言
ActivityLog 插件已翻译为
- 🇧🇷 巴西葡萄牙语
- 🇺🇸 英语
- 🇪🇸 西班牙语
- 🇫🇷 法语
- 🇮🇷 波斯语
- 🇦🇪 阿拉伯语
- 🇵🇹 葡萄牙语
安装
您可以通过 composer 安装此包
composer require rmsramos/activitylog
之后运行安装命令
php artisan activitylog:install
这将发布来自 spatie/laravel-activitylog
的配置和迁移
并运行迁移
php artisan migrate
您可以使用以下命令手动发布配置文件
php artisan vendor:publish --tag="activitylog-config"
这是已发布配置文件的内容
return [ 'resources' => [ 'label' => 'Activity Log', 'plural_label' => 'Activity Logs', 'navigation_item' => true, 'navigation_group' => null, 'navigation_icon' => 'heroicon-o-shield-check', 'navigation_sort' => null, 'default_sort_column' => 'id', 'default_sort_direction' => 'desc', 'navigation_count_badge' => false, 'resource' => \Rmsramos\Activitylog\Resources\ActivitylogResource::class, ], 'datetime_format' => 'd/m/Y H:i:s', ];
可选地,您可以使用以下命令发布视图
php artisan vendor:publish --tag="activitylog-views"
用法
基本的 Spatie ActivityLog 使用方法
在您的 Model
中添加 Spatie\Activitylog\Traits\LogsActivity
特性,并配置 getActivitylogOption
函数
有关更多配置,请参阅 Spatie 文档
use Illuminate\Database\Eloquent\Model; use Spatie\Activitylog\Traits\LogsActivity; use Spatie\Activitylog\LogOptions; class NewsItem extends Model { use LogsActivity; protected $fillable = ['name', 'text']; public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logOnly(['name', 'text']); } }
插件使用
在您的 Panel ServiceProvider (App\Providers\Filament)
中激活插件
将 Rmsramos\Activitylog\ActivitylogPlugin
添加到您的面板配置中
use Rmsramos\Activitylog\ActivitylogPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ ActivitylogPlugin::make(), ]); }
自定义 ActivitylogResource
您可以通过更新 ->resource()
的值来替换使用的 ActivitylogResource
。使用此功能创建自己的 CustomResource
类并扩展原始的 \Rmsramos\Activitylog\Resources\ActivitylogResource::class
。这将允许您自定义一切,如视图、表、表单和权限。
注意
如果您希望更改列表和视图页面上的资源,请确保在新的资源上替换 getPages
方法,并创建自己的 ListPage
和 ViewPage
类以引用自定义的 CustomResource
。
use Rmsramos\Activitylog\ActivitylogPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ ActivitylogPlugin::make() ->resource(\Path\For\Your\CustomResource::class), ]); }
自定义标签资源
您可以通过更新 ->label()
和 ->pluralLabel()
的值来替换使用的 Resource label
。
use Rmsramos\Activitylog\ActivitylogPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ ActivitylogPlugin::make() ->label('Log') ->pluralLabel('Logs'), ]); }
在导航中显示资源
您可以通过更新 ->navigationItem()
的值来启用或禁用 Resource navigation item
。
use Rmsramos\Activitylog\ActivitylogPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ ActivitylogPlugin::make() ->navigationItem(false), // by default is true ]); }
分组资源导航项
您可以通过更新 ->navigationGroup()
的值来添加 Resource navigation group
。
use Rmsramos\Activitylog\ActivitylogPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ ActivitylogPlugin::make() ->navigationGroup('Activity Log'), ]); }
自定义资源导航图标
您可以通过更新 ->navigationIcon()
的值来替换使用的 Resource navigation icon
。
use Rmsramos\Activitylog\ActivitylogPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ ActivitylogPlugin::make() ->navigationIcon('heroicon-o-shield-check'), ]); }
激活计数徽章
您可以通过更新 ->navigationCountBadge()
的值来激活 Count Badge
。
use Rmsramos\Activitylog\ActivitylogPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ ActivitylogPlugin::make() ->navigationCountBadge(true), ]); }
设置导航排序
您可以通过更新 ->navigationSort()
的值来设置 Resource navigation sort
。
use Rmsramos\Activitylog\ActivitylogPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ ActivitylogPlugin::make() ->navigationSort(3), ]); }
授权
如果您希望阻止某些用户访问日志资源,请在 ActivitylogPlugin
链中添加授权回调。
use Rmsramos\Activitylog\ActivitylogPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ ActivitylogPlugin::make() ->authorize( fn () => auth()->user()->id === 1 ), ]); }
角色策略
要确保通过角色策略访问 ActivitylogResource,您需要在 AppServiceProvider 中添加以下内容
use App\Policies\ActivityPolicy; use Illuminate\Support\Facades\Gate; use Spatie\Activitylog\Models\Activity; class AppServiceProvider extends ServiceProvider { public function boot(): void { Gate::policy(Activity::class, ActivityPolicy::class); } }
完整配置
use Rmsramos\Activitylog\ActivitylogPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ ActivitylogPlugin::make() ->resource(\Path\For\Your\CustomResource::class) ->label('Log') ->pluralLabel('Logs') ->navigationItem(true) ->navigationGroup('Activity Log') ->navigationIcon('heroicon-o-shield-check') ->navigationCountBadge(true) ->navigationSort(2) ->authorize( fn () => auth()->user()->id === 1 ), ]); }
关系管理器
如果您有一个使用 Spatie\Activitylog\Traits\LogsActivity
特性的模型,您可以向 Filament 资源添加 Rmsramos\Activitylog\RelationManagers\ActivitylogRelationManager
关系管理器,以显示对您的模型执行的所有活动日志。
use Rmsramos\Activitylog\RelationManagers\ActivitylogRelationManager; public static function getRelations(): array { return [ ActivitylogRelationManager::class, ]; }
时间轴操作
为了使查看活动日志更容易,您可以使用自定义操作。在表函数中的 UserResource 中,添加 ActivityLogTimelineTableAction
。
use Rmsramos\Activitylog\Actions\ActivityLogTimelineTableAction; public static function table(Table $table): Table { return $table ->actions([ ActivityLogTimelineTableAction::make('Activities'), ]); }
您可以通过传递一个包含关系的矩阵,记得配置您的 Models
。
public static function table(Table $table): Table { return $table ->actions([ ActivityLogTimelineTableAction::make('Activities') ->withRelations(['profile', 'address']), //opcional ]); }
您可以通过配置图标和颜色,默认使用 'heroicon-m-check'
图标和 'primary'
颜色。
use Rmsramos\Activitylog\Actions\ActivityLogTimelineTableAction; public static function table(Table $table): Table { return $table ->actions([ ActivityLogTimelineTableAction::make('Activities') ->timelineIcons([ 'created' => 'heroicon-m-check-badge', 'updated' => 'heroicon-m-pencil-square', ]) ->timelineIconColors([ 'created' => 'info', 'updated' => 'warning', ]) ]); }
您可以通过传递一个限制来限制查询中的结果数量,默认返回最后 10 条记录。
use Rmsramos\Activitylog\Actions\ActivityLogTimelineTableAction; public static function table(Table $table): Table { return $table ->actions([ ActivityLogTimelineTableAction::make('Activities') ->limit(30), ]); }
完整时间轴配置
use Rmsramos\Activitylog\Actions\ActivityLogTimelineTableAction; public static function table(Table $table): Table { return $table ->actions([ ActivityLogTimelineTableAction::make('Activities') ->withRelations(['profile', 'address']) ->timelineIcons([ 'created' => 'heroicon-m-check-badge', 'updated' => 'heroicon-m-pencil-square', ]) ->timelineIconColors([ 'created' => 'info', 'updated' => 'warning', ]) ->limit(10), ]); }
变更日志
有关最近更改的更多信息,请参阅 变更日志。
贡献
有关详细信息,请参阅 贡献指南。
安全漏洞
请查阅 我们的安全策略 了解如何报告安全漏洞。
致谢
特别感谢这些杰出的工具和人们(开发者),活动日志插件的存在得益于他们的启发,以及在某个时刻使用了这些人的代码。
鸣谢
许可协议
MIT 许可协议(MIT)。请参阅 许可文件 获取更多信息。