Pacuna's Blog

Laravel Model Callbacks

En la nueva versi贸n de Laravel, se han introducido ciertos eventos que nos sirven para inyectar c贸digo durante el ciclo de vida de nuestros objetos de Eloquent. Estas funciones se conocen generalmente con el nombre de Model Callbacks. Usar estos eventos es una buena pr谩ctica y nos puede ayudar a deshacernos de c贸digo que no deber铆a ir en nuestros controladores.

Supongamos que tenemos un modelo User que tiene atributos para su nombre y apellido. Lo que queremos es asegurarnos de que el nombre y apellido sean guardados con la capitalizaci贸n correcta en nuestra base de datos, esto significa con su primer car谩cter siempre en may煤scula. Aveces nuestros usuarios se registrar谩n y escribir谩n su nombre y apellido con min煤scula.

Para remediar este problema podemos usar el callback saving, el cual ser谩 ejecutado antes de guardar el modelo en la base de datos.

 $user = new User();
 $user->name = 'john';
 $user->lastname = 'doe';
 $user->save();

Este es el trozo de c贸digo que est谩 guardando el usuario en la base de datos. Lo que deseamos es capitalizar su nombre y apellido antes de que sea guardado. Para esto podemos construir una clase y denominarla UserObserver, ya que va a observar ciertos eventos en el modelo. Utilizaremos el callback saving para arreglar el error en el nombre y apellido:

class UserObserver{
 public function saving($model)
 {
 $model->name = ucfirst($model->name);
 $model->lastname = ucfirst($model->lastname);
 }}

Luego para poner esta clase en funcionamiento debemos pasarla como argumento en la siguiente funci贸n:

User::observe(new UserObserver);

Ahora todo est谩 listo. Cuando en nuestro controlador se ejecute $user->save(), primero se desplegar谩 el evento saving, el cual est谩 siendo escuchado por nuestra clase UserObserver, y antes de que el objeto sea guardado se aplicar谩n las funciones necesarias para capitalizar el nombre y el apellido correctamente. Luego se guardar谩 el objeto.

Laravel no s贸lo tiene callbacks para ejecutar antes de guardar objetos. La lista completa es: creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored.

Te invito a que juegues con estos distintos eventos y entiendas la utilidad de cada uno.

Si tienes dudas comenta!

View original

#php #laravel

- 1 toasts