sinclairt / track
跟踪您模型的变化以及您想跟踪的任何自定义事件
Requires
- php: >=5.4.0
- laracasts/presenter: ^0.2.1
- sinclairt/api-foundation: ^1.0.0
Requires (Dev)
- laracasts/testdummy: ~2.0
- laravel/laravel: dev-develop
- phpspec/phpspec: ~2.1
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-29 02:03:25 UTC
README
composer require sinclairt/track
接下来,您需要在app/config/app.php中注册服务提供者
'Sinclair\Track\TrackServiceProvider'
最后运行php artisan vendor:publish
用法
您需要做的所有事情是在您想要跟踪的任何扩展Eloquent的模型中使用TrackTrait。
注意,如果在运行迁移和为数据库填充数据之前包含TrackTrait,则包将失败,因为表不存在,无法插入数据。
以下事件会自动跟踪:创建、更新、更新、删除和恢复(仅在模型使用SoftDeleteTrait时跟踪)。
此包可以跟踪关系表同步,但Laravel内部不会触发事件,因此您必须手动实现。此方法仅在调用sync()
之后才能工作。
调用此方法后,将结果返回到trackPivotChanges()
方法中,同时包括当前模型和其他完全限定的相关模型名称。
示例
$ids = [1, 2, 3, 4];
$changes = $group->addressees()->sync($ids);
$group->trackPivotChanges($changes, $group, App\Repositories\Addressee\Addressee::class);
不需要使用完全限定类名,但如果您想使用内置的展示器,则必须这样做,否则您可以创建自己的实现。
自定义日志记录
您可以通过调用以下方式在对象上记录任何内容:
{object}::log($event, $model = null, $data = [])
事件是您要记录的事件类型,这是Track包存储创建/更新/删除等事件的地方。如果没有传递,则默认为当前对象,但可以覆盖此值。$data
变量包含您希望存储在跟踪中的所有附加字段,它们可以是
- user_id 如果可用,则默认为登录用户
- 字段
- old_value
- new_value
- event 尽管这是
$event
变量 - tracked_type 这将从您提供的模型中获取
- tracked_id 如上所述
记录事件
将任何事件类添加到track配置中的events键中,Track包将记录事件,它不会将其附加到任何对象上,但可以通过Track模型直接访问。
目前有一个自定义事件示例,您可以删除它(或保留它)。
API
此包中有4个路由
- GET /api/v1/track - 获取所有跟踪更改,这是分页的
- POST /api/v1/track/filter - 获取一组筛选后的跟踪更改(分页)。可用的筛选器
- tracked_type
- tracked_id
- user_id
- event
- 字段
- old_value
- new_value
- GET /api/v1/track/{track} - 获取单个跟踪更改
- POST /api/v1/track/object/ - 通过对象获取所有跟踪更改 - 这需要以下参数
- object_id
- object_class
API分页调用
您可以为分页调用设置以下参数
- rows (integer) 默认 15 每页的行数
- search (bool) 默认 true 是否在筛选期间使用搜索功能
- orderBy (string) 默认 null 结果按哪个列排序
- direction (asc|desc) 默认 asc 排序方向
- pagination_name (string) 默认 page 分页集的名称
- columns (array) 默认 ['*'] 从数据库表中返回哪些列
展示
要获取特定对象的更改,请在您的跟踪对象上调用trackedChanges()
方法。
Track模型已经为您配置了视图展示器。
示例
@foreach($object->trackedChanges as $change)
<tr>
<td>{{ $change->present()->prettyChange() }}</td>
</tr>
@endforeach
以下文本将被返回
- "已更新":用户将示例字段从旧值更新为新值
- "已附加":用户附加了一个名为Example的ExampleObject
- "已分离":用户从ExampleObject中分离了一个名为Example的对象
- "默认":用户{创建/删除/恢复}了一个ID为1的Example
默认情况下,演示者使用Auth User模型,但您可以在配置文件中更改此设置。
用于显示的字段名称也在此列出,其中用户名是默认值。同样,当演示者被调用并命名它正在使用的附加/分离对象时,它默认使用“name”字段名称。此配置没有设置,因为每个类的名称可能不同,在这种情况下,您可以使用演示者作为模板创建自己的,或者确保您的具有枢轴的表中有一个名称字段。