diff --git a/docs/Behavior/AfterSave.md b/docs/Behavior/AfterSave.md new file mode 100644 index 000000000..e423294f9 --- /dev/null +++ b/docs/Behavior/AfterSave.md @@ -0,0 +1,35 @@ +# AfterSave Behavior + +A CakePHP behavior to allow the entity to be available inside afterSave() callback. + +## Introduction +It takes a clone of the entity from beforeSave(). This allows all the +info on it to be available in the afterSave() callback or from the outside without resetting (dirty, ...). + +### Technical limitation +Make sure you do not further modify the entity in the table's beforeSave() then. As this would +not be part of the cloned and stored entity here. + +## Usage +Attach it to your model's `Table` class in its `initialize()` method like so: +```php +$this->addBehavior('Tools.AfterSave', $options); +``` + +Then inside your table you can do: +```php +public function afterSave(Event $event, EntityInterface $entity, ArrayObject $options) { + $entityBefore = $this->getEntityBeforeSave(); + // Now you can check isDirty() etc +} +``` + +The same call could also be made from the calling layer/object on the table: +```php +$table->saveOrFail(); +$entityBefore = $table->getEntityBeforeSave(); +``` + +If you are using save(), make sure you check the result and that the save was successful. +Only call this method after a successful save operation. +Otherwise, there will not be an entity stored and you would get an exception here. diff --git a/docs/README.md b/docs/README.md index 44e353c48..2061c4b26 100644 --- a/docs/README.md +++ b/docs/README.md @@ -30,6 +30,7 @@ Controller: * [Controller](Controller/Controller.md) Behaviors: +* [AfterSave](Behavior/AfterSave.md) * [Jsonable](Behavior/Jsonable.md) * [Passwordable](Behavior/Passwordable.md) * [Slugged](Behavior/Slugged.md)