lukasjankowski / laravel-revision
一个支持多守卫的laravel 5版本控制包,用于监视变更
This package is not auto-updated.
Last update: 2024-09-24 19:03:55 UTC
README
Laravel-Revision for Laravel 5
此包允许您记录对特定模型的更改。
注意:有许多包覆盖了类似的功能。此包深受Revisionable和Laravel-Auditing的启发,您绝对应该检查它们。
为什么还需要另一个呢?
简单:这两个包在写作时都没有多认证支持。而这个包有。
我在一个项目中遇到一个问题,就是我想使用这些包,但当我意识到它们不支持不同的Auth-Providers时,我就陷入了困境。所以我继续前进,并制作了这个包。它遵循相同的基本原则,并使用非常相似的语法。
安装
通过composer要求
composer require lukasjankowski/laravel-revision
在您的 config/app.php 中包含服务提供者。
'providers' => [ // ... LukasJankowski\Revision\RevisionServiceProvider::class ];
发布配置文件。
php artisan vendor:publish --provider="LukasJankowski\Revision\RevisionServiceProvider" --tag="config"
发布迁移。
php artisan vendor:publish --provider="LukasJankowski\Revision\RevisionServiceProvider" --tag="migrations"
您可以在配置文件中更改表名,该配置文件位于:config/revision.php。
最后迁移迁移
php artisan migrate
使用
将 LukasJankowski\Revision\Traits\HasRevisions 特性添加到您想启用修订的模型中。
示例
use Illuminate\Database\Eloquent\Model; use LukasJankowski\Revision\Traits\HasRevision; class Post extends Model { use HasRevisions; // ... }
将 LukasJankowski\Revision\Traits\IsReviser 特性添加到您想执行修订的模型中。
示例
use Illuminate\Foundation\Auth\User as Authenticatable; use LukasJankowski\Revision\Traits\IsReviser; class User extends Authenticatable { use IsReviser; // ... }
您可以在通用的 config/revision.php 文件中执行配置。但如果你想要更精细的控制
use Illuminate\Database\Eloquent\Model; use LukasJankowski\Revision\Traits\HasRevision; class Post extends Model { use HasRevisions; /** * The fields, which will not be logged in the revisions. * * @var array */ protected $revisionExclude = [ 'password', 'remember_token', ]; /** * The threshold, which will limit the revisions to that number. * * @var int */ protected $revisionThreshold = 123; // ... }
修订将记录 created、updated、deleted 和 restored 事件。
然后您可以访问这些修订
从具有 "hasRevisions" 的模型
$post = App\Post::find(1); $post->revisions; // Returns all revisions made to this record in a collection.
从具有 "hasRevisions" 的模型,使用预加载
$post = App\Post::find(1); $post->revisions()->with('revisers')->get(); // Same as above, but eager load the ones, who performed the revision.
从执行修订的 "isReviser" 模型
$user = App\User::find(1); $user->revised; // Returns all revisions made by this record in a collection.
从执行修订的 "isReviser" 模型,使用预加载
$user = App\User::find(1); $user->revised()->with('revisions')->get(); // Same as above, but eager load the models on which the revisions were performed.
由于它是一个集合,它支持所有其方法
$post = App\Post::find(1); $post->revisions->first(); $post->revisions->last(); $post->revisions->find(12); // ...
但也提供了一种获取修改后的数据的方法
$post = App\Post::find(1); $revision = $post->revisions->first(); $revision->getModified(); // Which will return an associative array similar to this: [ 'title' => [ 'new' => 'Fresh and new', 'old' => 'Old and stale', ], 'body' => [ 'new' => 'Lorem ipsum...', 'old' => 'Placeholder.Place...', ], ];
如您所见,它与上述提到的包非常相似。然而,只要他们实现了IsReviser特性,就不重要是谁执行了修订。然后,包将继续尝试获取当前登录的用户作为修订者,如果失败,则默认为null。
待办事项
- 单元测试