Eloquent, el ORM de Laravel, dispara una serie de eventos antes y después de crear, actualizar o eliminar registros. Por ejemplo tenemos eventos como «creating» y «created» o «saving» y «saved». Hasta Laravel 5.3 podíamos asociar dichos eventos a callbacks usando una sintaxis como: Event::list(«eloquent.created: App\Post», $callback) o App\Post::created($callback).
Sin embargo, desde hace varias versiones, Laravel nos permite trabajar con eventos y listeners utilizando clases y a partir de Laravel 5.4 también podemos definir clases para los modelos de Eloquent de una forma muy sencilla como veremos en la siguiente lección:
Notas
Por Clemir Rondón.
En Laravel 5.3 y versiones anteriores podemos en el método boot()
del archivo /app/Providers/EventServiceProvider.php agregar:
Event::listen('eloquent.updated: App\Product', function ($product) { dd('Actualizando producto', $product->toArray()); });
Con lo cual se ejecutará al dispararse el evento updated
del modelo Product.
Como alternativa, también puedes tener la clase evento ProductUpdated
y una clase listener SendProductUpdatedConfirmation
y agregarlo al array $listen
de /app/Providers/EventServiceProvider.php de esta manera:
protected $listen = [ 'App\Events\ProductUpdated' => [ 'App\Listeners\SendProductUpdatedConfirmation', ], ];
En la lección Crea y dispara tus propios eventos con Laravel te explicamos cómo generar automáticamente estas clases con el comando de artisan php artisan event:generate.
Además, en las lecciones de nuestro Curso de Eventos y Jobs con Laravel se explica con detalle cómo funcionan los eventos en Laravel.
Sin embargo, para Laravel 5.4 podemos asociar un evento como por ejemplo ProductUpdated
a un modelo de forma sencilla, agregando una propiedad llamada $events
en la clase del modelo, donde le asignas evento con la respectiva clase que quieres que se dispare:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Product extends Model { protected $events = [ 'updated' => App\Events\ProductUpdated::class, ]; }
Material relacionado
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Traducciones basadas en JSON en Laravel 5.4 Lección siguiente Uso de Markdown en los Mailables en Laravel 5.4