Есть в Laravel такие обратные вызовы, как:
afterSave() beforeSave() etc
Я искал, но ничего не нашел. Если таких вещей нет – лучший способ их реализации?
Благодаря!
На самом деле, Laravel имеет реальный обратный вызов до | после сохранения | обновить | создать некоторую модель. Проверь это:
https://github.com/laravel/laravel/blob/3.0/laravel/database/eloquent/model.php#L362
EventListener, как сохраненные и сохраняющие, являются настоящими обратными вызовами
$this->fire_event('saving'); $this->fire_event('saved');
как мы можем работать с этим? просто назначьте его этому примеру eventListener:
\Laravel\Event::listen('eloquent.saving: User', function($user){ $user->saving();//your event or model function });
Лучший способ достичь до и после сохранения обратных вызовов для расширения функции save()
.
Вот краткий пример
class Page extends Eloquent { public function save(array $options = []) { // before save code parent::save(); // after save code } }
Итак, теперь, когда вы сохраняете объект страницы, его вызов вызывает функцию save()
которая включает функцию parent::save()
;
$page = new Page; $page->title = 'My Title'; $page->save();
Добавление в пример для Laravel 4:
class Page extends Eloquent { public static function boot() { parent::boot(); static::creating(function($page) { // do stuff }); static::updating(function($page) { // do stuff }); } }
Даже если этот вопрос уже отмечен «принят» – я добавляю новый обновленный ответ для Laravel 4.
Beta 4 из Laravel 4 только что представила события крюка для событий Eloquent save – поэтому вам больше не нужно расширять ядро:
Добавлены методы Model :: create (Closure) и Model :: update (Closure) для подключения к событиям Eloquent save. Поблагодарите Фила Стерджона за то, что он наконец надавил на меня … 🙂
Если вам нужен контроль над самой моделью, вы можете переопределить функцию сохранения и поместить свой код до или после __parent::save()
.
В противном случае перед каждой эвакуационной моделью происходит событие, которое оно само сохраняет.
Также есть два события, когда Eloquent сохраняет модель.
"eloquent.saving: model_name" или "eloquent.saved: model_name".