lukasjankowski/laravel-revision

一个支持多守卫的laravel 5版本控制包,用于监视变更

1.0.0 2017-08-15 12:34 UTC

This package is not auto-updated.

Last update: 2024-09-24 19:03:55 UTC


README

Laravel-Revision for Laravel 5

此包允许您记录对特定模型的更改。

注意:有许多包覆盖了类似的功能。此包深受RevisionableLaravel-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;
    
    // ...
}

修订将记录 createdupdateddeletedrestored 事件。

然后您可以访问这些修订

从具有 "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。

待办事项

  • 单元测试