Saltar al contenido

Validación del formulario de solicitud con Laravel

¿Así que quieres construir una aplicación desde cero, pero no tienes tiempo? El framework Laravel de PHP podría ser la respuesta, ofreciendo varios componentes útiles nada más sacarlos de la caja. Ya sea que hayas aprendido el por qué de usar Laravel con nuestro curso Try Laravel o nuestro post anterior, es hora de indagar en un caso de uso práctico de este framework de PHP.

Cuando dejamos nuestra aplicación en Try Laravel, estábamos usando una validación básica que se ve así:

Validación del formulario de solicitud con Laravel
Validación del formulario de solicitud con Laravel
/** * Almacenar un recurso recién creado en el almacén. * * @param  ~ Iluminar { ~ -Http ~ -Solicitar $ solicitud * * @volver  ~ Iluminar { ~ -Http} Respuesta */ almacén de la función pública (Solicitud $ solicitud) { ~ validar ($ solicitud, [ $0027nombre$0027 =  ~; $0027requerido|único: markets|max:255$0027, $0027website$0027 => $0027required$0027, $0027city$0027 => $0027required$0027, ]); Market::create($request;all()); return redirect($0027markets$0027)-($0027status$0027, $0027New Market Created! $0027); }

En este ejemplo estamos usando un validador estándar en el objeto de la petición, y luego aplicando reglas a cada una de nuestras entradas de forma. Si esto pasa las reglas que establecimos entonces crearemos nuestro nuevo Mercado y lo redirigiremos de vuelta a la página del índice de mercados. Este tipo de sistema funciona bien cuando tenemos un par de campos, pero cuando nuestro formulario crece, también lo hará nuestra validación. También queremos mantener nuestro código limpio y reutilizable, por ejemplo cuando necesitemos llamar a la misma validación desde nuestra acción de edición.

Nos encargaremos de esto usando un formulario de validación de solicitud personalizado que tendremos que generar. Para ello, deberá ejecutar el comando artesanal make:request seguido del nombre de la solicitud.

php artesano make:request StoreMarket

Una vez generada la nueva clase, la encontrará en el directorio app/Http/Requests. Echemos un vistazo a nuestra nueva clase:

<?phpnamespace AppHttpNRequests;use IlluminateNFoundationNHttpNFormRequest;class StoreMarket extiende FormRequest{ /** * Determinar si el usuario está autorizado a hacer esta solicitud. * * @retorno bool */ public function authorize() { return false; } /** * Obtener las reglas de validación que se aplican a la solicitud. * * @return array */ public function rules() { return [ // ]; }}

Como todavía no hemos establecido la autenticación en nuestra aplicación, tendremos que cambiar el valor de retorno del primer método a true. De esta manera cualquiera está autorizado a crear un mercado. Claramente no querríamos poner esto en producción sin autenticación, pero por ahora sólo pasaremos por alto esta lógica.

El siguiente método es el método de las reglas, vamos a añadir las reglas de nuestro código existente a este método.

/** * Obtener las reglas de validación que se aplican a la solicitud. * * @retorno array */ reglas de función pública() { return [ $0027nombre$0027 = > $0027required|unique:markets|max:255$0027, $0027website$0027 =§; $0027required$0027, $0027city$0027 =§; $0027required$0027, ]; }

Ahora que tenemos las reglas en nuestra nueva clase de solicitud de formularios, necesitaremos implementar esto en nuestro controlador para aplicar estas reglas.

Tendremos que hacer algunas cosas para que esto funcione como lo hace ahora en el controlador. Primero eliminaremos la sugerencia de $0027Request$0027 en el argumento de la tienda y la sustituiremos por nuestra nueva clase $0027StoreMarket$0027 dejando $request como está. Esto usará nuestro «for request» en su lugar y aplicará las reglas en nuestra clase personalizada. Para que el controlador vea nuestra nueva petición tendremos que añadir su espacio de nombre en la parte superior de nuestro archivo, justo debajo de la llamada a la clase Request

usar AppMarket;

usa IlluminateHttpN-Solicitud;

usa AppHttpN-SolicitudesN-StoreMarket;

Lo último que tendrá que ocurrir es eliminar la llamada existente para $this->validar, ya que ahora será manejada por la solicitud personalizada.

/** * Almacenar un recurso recién creado en el almacén. * * @param  ~ Iluminar {Http} {Solicitud $solicitud * @retorno  ~ Iluminar {Http} {Respuesta */ tienda de función pública(StoreMarket $solicitud) {Mercado::crear($solicitud-{[all()]); retorno redirigir($0027mercados$0027)-{{i} con($0027estado$0027, $0027Nuevo mercado creado!$0027); }

Ahora, si una validación falla, se generará una respuesta redirigida para redirigir de nuevo al formulario. Además, al igual que antes, cualquier error también se mostrará en la sesión y se mostrará al usuario.

Si quieres saber más sobre esto, puedes leer los documentos de Laravel en su página web. Para realmente sumergirse en lo que se puede hacer con Laravel, pruebe nuestro nuevo curso, De la forma a la mesa con Laravel.