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