En este post voy a mostrarte cómo hacer el envío de un formulario con Laravel, así como la validación del mismo del lado del servidor.
Laravel provee una forma fácil de validar, además de mostrar los errores en una lista que puede estar bajo el formulario.
Nota: si quieres usar la validación con mensajes en español, por favor, mira este post, también te invito a ver más tutoriales de Laravel.
El formulario queda como se ve a continuación:
@extends("maestra")
@section("titulo", "Agregar área")
@section("contenido")
<div class="container">
<div class="columns">
<div class="column is-half-tablet">
<h1 class="is-size-1">Agregar área</h1>
<form method="POST" action="{{route("guardarArea")}}">
@csrf
<div class="field">
<label class="label">Nombre</label>
<div class="control">
<input autocomplete="off" name="nombre" class="input" type="text"
placeholder="Nombre de área">
</div>
</div>
@include("errores")
@include("notificacion")
<button class="button is-success">Guardar</button>
<a class="button is-primary" href="{{route("areas")}}">Ver todas</a>
</form>
<br>
</div>
</div>
</div>
@endsection
Presta atención al action
, que va a una ruta con nombre llamada “guardarArea“. Otra cosa que debes notar es el atributo name
del input
, pues ese nombre lo vamos a usar en la validación.
También fíjate en que incluye algo llamado “errores” cuyo código veremos abajo.
En mi archivo de rutas, simplemente llamo a un método del controlador:
<?php
Route::post("areas/agregar", "AreasController@agregar")->name("guardarArea");
Se invocará al método agregar
de AreasController
.
Para validar y dejar limpio el controlador, hay que crear un Request, pues nos permite tener mayor control y separar la validación:
Los requests se ubican en app/Http/Requests y deben extender de FormRequest.
Lo que importa son dos métodos: authorize y rules.
Para la validación simplemente regresamos un arreglo con las reglas, cuya lista completa puedes ver aquí.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class GuardarArea extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/ public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/ public function rules()
{
return [
"nombre" => "required|max:255"
];
}
}
Dentro del controlador, vamos a recibir ese FormRequest que acabamos de crear.
La magia aquí ocurre en que el método del controlador será llamado únicamente si la validación pasa, es decir, en el controlador asumimos que ya está validado, pues si la validación falla, el método no será llamado
De esa forma separamos la lógica.
<?php
namespace App\Http\Controllers;
use App\Area;
use App\Http\Requests\GuardarArea;
class AreasController extends Controller
{
//
public function agregar(GuardarArea $peticion)
{
$area = new Area;
$area->nombre = $peticion->nombre;
$exitoso = $area->save();
$mensaje = "Área agregada correctamente";
$tipo = "success";
if ($exitoso) {
$mensaje = "Error agregando área. Intente más tarde";
$tipo = "danger";
}
return redirect()->route("formularioArea")
->with("mensaje", $mensaje)
->with("tipo", $tipo);
}
}
Ahora vamos a ver la plantilla de errores. Laravel pone los errores de la validación en una variable llamada $errors
.
Podemos iterarlos con un foreach (para obtenerlos a todos se usa $errors->all()
) e imprimirlos.
El contenido del archivo que muestra errores queda así:
@if(!empty($errors->all()))
<div class="notification is-danger">
<h4 class="is-size-4">Por favor, valida los siguientes errores:</h4>
<ul>
@foreach ($errors->all() as $mensaje)
<li>
{{$mensaje}}
</li>
@endforeach
</ul>
</div>
@endif
Y lo estamos incluyendo en el formulario.
Ahora veamos la demostración. Como lo dije anteriormente, el método del controlador ni siquiera será llamado si la validación falla.
Al enviar el formulario con datos erróneos:
Y si los datos son correctos, se muestra un mensaje de retroalimentación exitoso.
Si crees que esa validación es muy simple, te muestro otra:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class AgregarArticuloDeInventarioRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/ public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/ public function rules()
{
return [
"fechaAdquisicion" => "required|date_format:Y-m-d",
"codigo" => "required|max:255",
"numeroFolioComprobante" => "max:255",
"descripcion" => "required|max:255",
"estado" => "required|in:regular,malo,inservible,noEncontrado",
"observaciones" => "max:255",
"costoAdquisicion" => "required|numeric|between:1,99999999.99",
"areas_id" => "required|exists:areas,id",//Requerido y que exista en áreas, columna id :)
];
}
}
En este caso incluso estoy validando que el id de área exista en otra tabla.
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
Esta web usa cookies.