Eventos Elocuentes
Los modelos Eloquent lanzan eventos al vacío de tu aplicación cada vez que ocurren ciertas acciones, independientemente de si estás detectando. Si estás familiarizado con pub/sub, se trata del mismo modelo (equí aprenderás más sobre todo el sistema de eventos de Laravel).
A continuación, se muestra un resumen rápido de cómo vincular un detector cuando se crea un nuevo Contact. Lo vincularemos en el método boot() de AppServiceProvider e imaginemos que estamos notificando a un servicio de terceros cada vez que creamos un nuevo Contact (ejemplo siguiente).
Vincular un detector a un evento Eloquent
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
$thirdPartyService = new SomeThirdPartyService;
Contact::creating(function ($contact) use ($thirdPartyService) {
try {
$thirdPartyService->addContact($contact);
} catch (Exception $e) {
Log::error('Failed adding contact to ThirdPartyService; canceled.');
return false; // Cancels Eloquent create()
}
});
}Podemos ver algunas cosas en el ejemplo anterior. Primero, usamos Modelname::eventName() como método y le pasamos una clausura. La clausura obtiene acceso a la instancia del modelo en la que se está operando. Segundo, vamos a necesitar definir este receptor en un proveedor de servicios en algún lugar. Y tercero, si devolvemos false, la operación se cancelará y save() o update() se cancelarán.
Estos son los eventos que cada modelo Eloquent dispara:
• creating • created • updating • updated • saving • saved • deleting • deleted • restoring • restored • retrieved
La mayoría de estos deberían ser bastante claros, excepto posiblemente restoring y restored, que se disparan cuando se restaura una fila eliminada-suavemente. Además, saving se dispara tanto para creating como para updating y saved se dispara tanto para created como para updated.
El evento retrieved se dispara cuando se recupera un modelo existente de la base de datos.
