sofa/revisionable
Composer 安装命令:
composer require sofa/revisionable
包简介
Nice and easy way to handle revisions of your db.
README 文档
README
Nice and easy way to handle revisions of your db.
- Handles the revisions in bulk - one entry covers all the created/updated fields, what makes it really easy to eg. compare 2 given versions or get all the data changed during single action.
Requirements
- This package requires PHP 5.4+
- Currently it works out of the box with Laravel5 + generic Illuminate Guard, tymon/jwt-auth OR cartalyst/sentry 2/sentinel 2
Usage (Laravel5 basic example - see Customization below as well)
1. Download the package or require in your composer.json:
composer require sofa/revisionable
2. Add the service provider to your app/config/app.php:
'providers' => array( ... 'Sofa\Revisionable\Laravel\ServiceProvider', ),
3. Publish the package config file:
~$ php artisan vendor:publish [--provider="Sofa\Revisionable\Laravel\ServiceProvider"]
this will create config/sofa_revisionable.php file, where you can adjust a few settings:
<?php return [ /* |-------------------------------------------------------------------------- | User model (for executor relation on Revision model). |-------------------------------------------------------------------------- | | By default App\User. */ 'usermodel' => 'App\User', /* |-------------------------------------------------------------------------- | User provider (auth) implementation. |-------------------------------------------------------------------------- | | By default Laravel generic Illuminate\Auth\Guard. | | Supported options: | - illuminate | - sentry | - sentinel | - jwt-auth | - session */ 'userprovider' => 'illuminate', /* |-------------------------------------------------------------------------- | User field to be saved as the author of tracked action. |-------------------------------------------------------------------------- | | By default: | | - id for illuminate | - login field (email) for sentry/sentinel */ 'userfield' => 'id', /* |-------------------------------------------------------------------------- | Table used for the revisions. |-------------------------------------------------------------------------- */ 'table' => 'revisions', /* |-------------------------------------------------------------------------- | Database connection used for the revisions. |-------------------------------------------------------------------------- */ 'connection' => null, ];
4. Run the migration in order to create the revisions table:
~$ php artisan revisions:table
~$ php artisan revisions:upgrade-5.3
~$ php artisan migrate [--database=custom_connection]
You can provide additional --database param if you want the migration to be run using non-default db connection.
5. Add revisionable trait to the models you wish to keep track of:
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Sofa\Revisionable\Laravel\Revisionable; // trait class User extends Model { use Revisionable; /* * Set revisionable whitelist - only changes to any * of these fields will be tracked during updates. */ protected $revisionable = [ 'email', 'name', ];
And that's all to get your started!
Customization in L5
Default behaviour:
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Sofa\Revisionable\Laravel\Revisionable; class Ticket extends Model { use Revisionable; }
$ php artisan tinker >>> $ticket = App\Models\Ticket::first(); => <App\Models\Ticket> >>> $revision->getDiff(); => [ "customer_id" => [ "old" => "1", "new" => "101" ], "item_id" => [ "old" => "2", "new" => "1" ], "responsible_id" => [ "old" => "8", "new" => "2" ] ] >>> $revision->old('item_id'); => "2" >>> $revision->new('item_id'); => "1" >>> $revision->isUpdated('item_id'); => true >>> $revision->isUpdated('note'); => false >>> $revision->label('item_id'); => "item_id" >>> $revision->old; => [ "defect" => "nie dziala", "note" => "wrocilo na gwarancji", "customer_id" => "1", "item_id" => "2", "responsible_id" => "8", "status_id" => "6" ] >>> $revision->action; => "updated"
But here's where you can leverage bundled Presenter in order to make useful adjustments:
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Sofa\Revisionable\Laravel\Revisionable; class Ticket extends Model { use Revisionable; protected $revisionPresenter = 'App\Presenters\Revisions\Ticket'; }
namespace App\Presenters\Revisions; use Sofa\Revisionable\Laravel\Presenter; class Ticket extends Presenter { protected $labels = [ 'item_id' => 'Przedmiot', 'customer_id' => 'Klient', 'status_id' => 'Status', 'responsible_id' => 'Serwisant', 'defect' => 'Usterka', 'note' => 'Uwagi', ]; protected $passThrough = [ 'item_id' => 'item.name', 'customer_id' => 'customer.name', 'responsible_id' => 'serviceman.name', 'status_id' => 'status.name', ]; protected $actions = [ 'created' => 'utworzony', 'updated' => 'edytowany', 'deleted' => 'usunięty', 'restored' => 'przywrócony', ]; }
then
$ php artisan tinker
>>> $ticket = App\Models\Ticket::first();
=> <App\Models\Ticket>
>>> $revision->old('item_id'); // value fetched from the relationship
=> "komputer pc"
>>> $revision->new('item_id'); // value fetched from the relationship
=> "laptop acer"
>>> $revision->label('item_id'); // custom label defined in the presenter
=> "Przedmiot"
>>> $revision->action; // custom action name defined in the presenter
=> "edytowany"
sofa/revisionable 适用场景与选型建议
sofa/revisionable 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 197.2k 次下载、GitHub Stars 达 256, 最近一次更新时间为 2014 年 12 月 06 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 「eloquent」 「revision」 「history」 「revisionable」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 sofa/revisionable 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 sofa/revisionable 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 sofa/revisionable 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A Laravel Eloquent model trait for translatable resource
A package for automatically encrypting and decrypting Eloquent attributes in Laravel 5.5+, based on configuration settings.
Manage a history of your models simply by adding a package for Laravel
Keep a revision history for your models without thinking, created as a package for use with Laravel
Help to manage meta data on Laravel Eloquent model
A package to cast json fields, each sub-keys is castable
统计信息
- 总下载量: 197.2k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 262
- 点击次数: 21
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2014-12-06