Что такое Laravel Observer
Laravel Observer: Полное руководство с примерами кода
В Laravel Observer — это паттерн для отслеживания событий моделей. Он позволяет автоматически реагировать на создание, обновление, удаление или восстановление записи в базе данных. Использование Observer повышает читаемость кода и отделяет бизнес-логику от контроллеров.
Observer в Laravel — это класс, который содержит методы, выполняемые при определённых событиях модели. Основные события:
- created — после создания записи
- updated — после обновления записи
- deleted — после удаления записи
- restored — после восстановления записи (soft delete)
- saving / saved — до/после сохранения
- updating / updated — до/после обновления
Observer полезен для уведомлений, логирования, автоматического изменения данных или интеграции с внешними сервисами.
Создание Observer
Для создания Observer используйте Artisan-команду:
php artisan make:observer UserObserver --model=User
Эта команда создаст класс UserObserver в папке app/Observers и автоматически привяжет его к модели User.
Пример Observer для модели User
<?php
namespace App\Observers;
use App\Models\User;
use Illuminate\Support\Facades\Log;
class UserObserver
{
public function created(User $user)
{
Log::info('Создан новый пользователь: ' . $user->email);
}
public function updated(User $user)
{
Log::info('Пользователь обновлён: ' . $user->email);
}
public function deleted(User $user)
{
Log::warning('Пользователь удалён: ' . $user->email);
}
}
Регистрация Observer
Observer нужно зарегистрировать, чтобы Laravel знал о его существовании. Обычно это делают в App\Providers\EventServiceProvider:
public function boot()
{
\App\Models\User::observe(\App\Observers\UserObserver::class);
}
После регистрации методы Observer будут автоматически вызываться при соответствующих событиях модели.
Использование нескольких Observer
Можно зарегистрировать несколько Observer для разных моделей:
\App\Models\Post::observe(\App\Observers\PostObserver::class); \App\Models\Order::observe(\App\Observers\OrderObserver::class);
Каждый Observer содержит только логику для своей модели.
Observer и события модели
Методы Observer совпадают с событиями Eloquent модели. Примеры событий:
retrieved— при получении моделиcreating/createdupdating/updateddeleting/deletedrestoring/restored
Вы можете использовать любые события для выполнения нужной логики.
Пример: отправка уведомлений при регистрации
use App\Models\User;
use App\Notifications\WelcomeNotification;
class UserObserver
{
public function created(User $user)
{
$user->notify(new WelcomeNotification());
}
}
Таким образом, уведомление отправляется автоматически сразу после создания пользователя, без дублирования кода в контроллере.
Soft Delete и Observer
Если модель использует Soft Delete (use SoftDeletes;), доступны события:
- deleted — вызывается при soft delete
- restored — при восстановлении записи
Пример логирования удаления и восстановления:
public function deleted(User $user)
{
Log::warning("Пользователь {$user->email} помечен как удалённый");
}
public function restored(User $user)
{
Log::info("Пользователь {$user->email} восстановлен");
}
Очереди и Observer
Observer может вызывать уведомления или задачи в очереди для асинхронной обработки:
public function created(User $user)
{
dispatch(function() use ($user) {
// сложная обработка, отправка email или API
})->delay(now()->addMinutes(1));
}
FAQ — Часто задаваемые вопросы
1. Можно ли использовать Observer без модели?
Нет, Observer привязан к конкретной модели. Для глобальных событий используйте Events/Listeners.
2. Чем Observer отличается от Events/Listeners?
Observer привязан к модели и реагирует на события Eloquent. Events/Listeners более гибкие и могут работать независимо от модели.
3. Можно ли использовать несколько Observer для одной модели?
Да, просто регистрируйте каждый Observer через Model::observe().
4. Как тестировать Observer?
Можно создавать мок-модель, вызывать методы сохранения и проверять, срабатывает ли логика Observer.
5. Поддерживает ли Observer Soft Delete?
Да, есть события deleted (soft delete) и restored.
Вывод
Laravel Observer позволяет чисто и централизованно управлять реакцией на события модели: создание, обновление, удаление, восстановление. Observer улучшает читаемость кода и упрощает поддержку приложения. Он совместим с уведомлениями, очередями и Soft Delete.
Комментарии (0)
Оставить комментарий