Observers
Los Observers agrupan los event listeners para un modelo Eloquent en una sola clase. Cada metodo corresponde a un evento del ciclo de vida del modelo.
Crear un Observer
php artisan make:observer PostObserver --model=Post
class PostObserver
{
public function creating(Post $post): void
{
$post->slug = Str::slug($post->title);
$post->user_id = auth()->id();
}
public function created(Post $post): void
{
// Notificar a los seguidores del autor
$post->author->followers->each(function ($follower) use ($post) {
$follower->notify(new NewPostPublished($post));
});
}
public function updating(Post $post): void
{
if ($post->isDirty('title')) {
$post->slug = Str::slug($post->title);
}
}
public function deleting(Post $post): void
{
// Eliminar archivos asociados
Storage::delete($post->cover_image);
}
public function forceDeleting(Post $post): void
{
// Solo cuando se usa forceDelete() con SoftDeletes
}
}
Registrar el Observer
En Laravel 11+, los observers se registran con un atributo en el modelo:
use Illuminate\Database\Eloquent\Attributes\ObservedBy;
#[ObservedBy(PostObserver::class)]
class Post extends Model
{
// ...
}
Eventos disponibles
retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, trashed, forceDeleting, forceDeleted, restoring, restored, replicating.
Los Observers mantienen la logica de efectos secundarios separada del modelo, mejorando la organizacion del codigo. Ten cuidado de no poner demasiada logica en observers, ya que pueden dificultar la depuracion.