Команда make:observer
Команда make:observer генерирует новый класс обозревателя в директории app/Observers. Обозреватель позволяет объединить все обработчики событий модели (создание, обновление, удаление и т.д.) в одном классе. Первым параметром команда принимает имя создаваемого обозревателя. Вторым необязательным параметром - имя модели, для которой создаётся обозреватель, чтобы автоматически сгенерировать методы для её событий.
Синтаксис
php artisan make:observer ObserverName [--model=ModelName]
Пример
Создадим обозреватель для модели User без автоматической привязки событий:
php artisan make:observer UserObserver
После выполнения команды в директории app/Observers будет создан файл UserObserver.php. В нём будут определены пустые методы для событий, которые можно заполнить логикой:
<?php
namespace AppObservers;
use AppModelsUser;
class UserObserver
{
public function created(User $user): void
{
// Логика после создания пользователя
}
public function updated(User $user): void
{
// Логика после обновления пользователя
}
public function deleted(User $user): void
{
// Логика после удаления пользователя
}
}
?>
Пример
Создадим обозреватель с привязкой к модели Post, чтобы автоматически сгенерировать методы для её событий:
php artisan make:observer PostObserver --model=Post
Команда сгенерирует обозреватель с методами, соответствующими событиям модели Post:
<?php
namespace AppObservers;
use AppModelsPost;
class PostObserver
{
public function creating(Post $post): void
{
// Действия перед созданием поста
}
public function created(Post $post): void
{
// Действия после создания поста
}
public function updating(Post $post): void
{
// Действия перед обновлением поста
}
public function updated(Post $post): void
{
// Действия после обновления поста
}
public function deleting(Post $post): void
{
// Действия перед удалением поста
}
public function deleted(Post $post): void
{
// Действия после удаления поста
}
}
?>
Для активации обозревателя его необходимо зарегистрировать в методе boot сервис-провайдера, например AppServiceProvider:
<?php
namespace AppProviders;
use Illuminate\Support\ServiceProvider;
use AppModelsPost;
use AppObserversPostObserver;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
Post::observe(PostObserver::class);
}
}
?>
Пример
Рассмотрим практическое использование обозревателя для отправки уведомления администратору при создании нового поста:
<?php
namespace AppObservers;
use AppModelsPost;
use IlluminateSupportFacadesLog;
class PostObserver
{
public function created(Post $post): void
{
Log::info('New post created: ' . $post->title);
// Отправка уведомления администратору
// Notification::send($admins, new PostCreatedNotification($post));
}
}
?>
Теперь при создании поста будет автоматически выполняться эта логика:
<?php
use AppModelsPost;
$post = new Post();
$post->title = 'New article';
$post->content = 'Content of the article';
$post->save();
// В логах появится запись: "New post created: New article"
?>
Результат выполнения кода:
"Post created successfully. Log entry added: New post created: New article"
Смотрите также
-
команда
make:model,
которая создаёт новую модель Eloquent -
команда
make:controller,
которая создаёт новый контроллер -
команда
make:event,
которая создаёт новое событие -
команда
make:listener,
которая создаёт новый обработчик событий