Ответ
Observer в Laravel — это класс, который прослушивает события жизненного цикла модели Eloquent (создание, обновление, удаление) и позволяет выносить побочную логику из самой модели, соблюдая принцип единственной ответственности (SRP).
Типичные сценарии использования:
- Отправка уведомлений (email, push) после создания пользователя.
- Очистка кэша при обновлении статьи.
- Ведение логов аудита или мягкое удаление связанных записей.
Создание и регистрация Observer:
php artisan make:observer UserObserver --model=User
Код Observer (app/Observers/UserObserver.php):
<?php
namespace AppObservers;
use AppModelsUser;
use AppNotificationsWelcomeNotification;
class UserObserver
{
public function created(User $user): void
{
// Отправляем приветственное письмо асинхронно через очередь
$user->notify(new WelcomeNotification());
}
public function updating(User $user): void
{
// Логируем, кто и когда изменил запись
$user->last_updated_by = auth()->id();
}
public function deleted(User $user): void
{
// Мягко удаляем связанные профили
$user->profile()->delete();
}
}
Регистрация в AppProvidersEventServiceProvider:
protected $observers = [
User::class => [UserObserver::class],
];
Преимущества: Чистые модели, централизованное управление побочными эффектами, легкость тестирования логики, реагирующей на события.
Ответ 18+ 🔞
А, слушай, Observer в Laravel — это такая штука, которая как будто подглядывает за твоей моделью, пока та живёт своей жизнью. Создали юзера, обновили, удалили — а этот наблюдатель, как хитрая жопа, всё видит и может своё дело тихонько сделать. Главная фишка — вынести всю побочную ересь из самой модели, чтобы она не превращалась в пиздопроебибну на тысячу строк. Принцип единственной ответственности, ёпта, не просто так придумали.
Где это может пригодиться, блядь?
- Отправить юзеру письмо с «добро пожаловать» сразу после регистрации. Чтобы не пиздовать логику отправки прямо в контроллере.
- Почистить кэш, когда статью обновили. А то потом сидишь и думаешь, почему на сайте хуйня старая показывается.
- Логировать, кто и когда что поменял, или тихонько удалить связанные записи, когда главную удалили.
Создаётся эта мартышлюшка просто:
php artisan make:observer UserObserver --model=User
А внутри (app/Observers/UserObserver.php) выглядит примерно так:
<?php
namespace AppObservers;
use AppModelsUser;
use AppNotificationsWelcomeNotification;
class UserObserver
{
public function created(User $user): void
{
// Кидаем приветственное уведомление в очередь, чтобы не тормозить
$user->notify(new WelcomeNotification());
}
public function updating(User $user): void
{
// Типа аудит: кто последний лапал запись
$user->last_updated_by = auth()->id();
}
public function deleted(User $user): void
{
// Аккуратно прибиваем связанный профиль, чтоб мусора не осталось
$user->profile()->delete();
}
}
Прописать его надо в AppProvidersEventServiceProvider, чтоб он вступил в силу:
protected $observers = [
User::class => [UserObserver::class],
];
В чём кайф, бля? Модели остаются чистыми, как слеза младенца, вся побочная логика в одном месте, и тестировать эту хуйню — одно удовольствие. Вместо того чтобы в каждом контроллере повторять одно и то же, ты просто знаешь: создался юзер — Observer уже ебёт ему письмо в очередь. Удобно, ёбана!