Add API to run callback after a model instance is saved

This commit is contained in:
Toby Zerner 2015-09-22 17:22:25 +09:30
parent 22beaf07f3
commit 1efddf416e
2 changed files with 35 additions and 0 deletions

View File

@ -12,6 +12,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- `route` attribute for Mithril elements as a shortcut to link to a route.
- Abstract SettingsModal component for quickly building admin config modals.
- "Debug" button to inspect the response of a failed AJAX request.
- `Model::afterSave()` API to run callback after a model instance is saved.
### Changed
- Migrations must be namespaced under `Flarum\Migrations\{Core|ExtensionName}`. ([#422](https://github.com/flarum/core/issues/422))

View File

@ -35,6 +35,29 @@ abstract class Model extends Eloquent
*/
public $timestamps = false;
/**
* An array of callbacks to be run once after the model is saved.
*
* @var callable[]
*/
public $afterSaveCallbacks = [];
/**
* {@inheritdoc}
*/
public static function boot()
{
parent::boot();
static::saved(function (Model $model) {
foreach ($model->afterSaveCallbacks as $callback) {
$callback($model);
}
$model->afterSaveCallbacks = [];
});
}
/**
* Get the attributes that should be converted to dates.
*
@ -94,6 +117,17 @@ abstract class Model extends Eloquent
);
}
/**
* Register a callback to be run once after the model is saved.
*
* @param callable $callback
* @return void
*/
public function afterSave($callback)
{
$this->afterSaveCallbacks[] = $callback;
}
/**
* @inheritdoc
*/