CakePHP Revisions plugin (CakeFest 2015)
A Plugin for CakePHP 3.x that allows you to track Revisions to Tables (at the entity level) in your Application
[Using Composer]
Add the plugin to your project's composer.json
- something like this:
{
"require": {
"cwbit/cakephp-revisions": "dev-master"
}
}
Because this plugin has the type cakephp-plugin
set in it's own composer.json
composer knows to install it inside your /plugins
directory (rather than in the usual 'Vendor' folder). It is recommended that you add /plugins/Revisions
to your cake app's .gitignore file. (Why? read this.)
[Manual]
- Download and unzip the repo (see the download button somewhere on this git page)
- Copy the resulting folder into
plugins
- Rename the folder you just copied to
Revisions
[GIT Submodule]
In your app
directory type:
git submodule add -b master git://github.com/cwbit/cakephp-revisions.git plugins/Revisions
git submodule init
git submodule update
[GIT Clone]
In your plugins
directory type:
git clone -b master git://github.com/cwbit/cakephp-revisions.git Revisions
In 3.0 you need to enable the plugin your config/bootstrap.php
file:
Plugin::load('Revisions');
If you are already using Plugin::loadAll();
, then this is not necessary.
Add the Behavior to any Table you want to track versions of
- Track any/all Revisions
- Explicity watch for changes to certain fields (whitelist)
- Ignore changes made to certain fields (blacklist)
The Basic Implementation will fire any time any field on the entity is modified.
public function initialize(){
parent::initialize();
$this->addBehavior('Revisions.Revisions');
}
You can also explicitly tell the Plugin to only trigger version control if specific field(s) have been modified.
public function initialize(){
parent::initialize();
$this->addBehavior('Revisions.Revisions', [
'watch' => [
'name', # trigger if,
'foo', # and only if,
'bar' # any of these fields are changed
],
]);
}
You can also explicitly tell the Plugin to ignore modifications to certain fields. The version control will only trigger if at least one other (non-ignored) field has been changed.
public function initialize(){
parent::initialize();
$this->addBehavior('Revisions.Revisions', [
'ignore' => [
'bigBlob', # only trigger if something
'created', # OTHER than these fields
'modified', # was changed
],
]);
}
The Plugin also comes with the ability to view all revisions and restore to any given point in time.
To enable this functionality, add and customize the following line in any view
<?= $this->Element('Revisions.Revisions/index', [
'id' => $entity->id, # replace with actual entity variable
'model' => 'examples', # replace with actual model
'limit' => 10, # optional
]);?>