Laravel: как создать функцию после или перед сохранением | обновлением
Мне нужно создать функцию для вызова после или до сохранения () или обновления (), но я не знаю, как это сделать. Я думаю, что мне нужен обратный вызов от save() update(), но я не знаю, как это сделать. Спасибо
2 ответа
Внутри вашей модели вы можете добавить метод boot(), который позволит вам управлять этими событиями.
Например, имея модель User.php:
class User extends Model
{
public static function boot()
{
parent::boot();
self::creating(function($model){
// ... code here
});
self::created(function($model){
// ... code here
});
self::updating(function($model){
// ... code here
});
self::updated(function($model){
// ... code here
});
self::deleting(function($model){
// ... code here
});
self::deleted(function($model){
// ... code here
});
}
}
Вы можете просмотреть все доступные события здесь: https://laravel.com/docs/5.2/eloquent
Это работает только после того, как на вашей модели произошло событие.
Создайте наблюдателя для своей модели
php artisan make:observer UserObserver --model=User
это создаст наблюдатель событий на вашей модели
class UserObserver
{
/**
* Handle the User "created" event.
*
* @param \App\Models\User $user
* @return void
*/
public function created(User $user)
{
//
}
/**
* Handle the User "updated" event.
*
* @param \App\Models\User $user
* @return void
*/
public function updated(User $user)
{
//
}
/**
* Handle the User "deleted" event.
*
* @param \App\Models\User $user
* @return void
*/
public function deleted(User $user)
{
//
}
/**
* Handle the User "forceDeleted" event.
*
* @param \App\Models\User $user
* @return void
*/
public function forceDeleted(User $user)
{
//
}
}
Вы должны зарегистрировать этого наблюдателя в методе загрузки на одном из ваших ServiceProvider, предпочтительно AppServiceProvider.
public function boot()
{
User::observe(UserObserver::class);
}
Создайте провайдера с помощью этой команды
php artisan make:provider ProviderClassName
затем определить обратные вызовы для моделей в функции загрузки
Model::created(function($model){
//Do you want to do
});
Список доступных обратных вызовов:
Model::creating(function($model){});
Model::updated(function($model){});
Model::updating(function($model){});
Model::deleted(function($model){});
Model::deleting(function($model){});
Model::saving(function($model){});
Model::saved(function($model){});