fbpx

Validación en Laravel

By 12 octubre 2020Wordpress

La validación de datos de cualquier app es de gran importancia y se deben proveer todos los posibles escenarios y considerar los posibles errores que puede cometer un usuario al interactuar con el sistema.

Básicamente existen 3 formas de validar un formulario, desde el frontend (javascript, jquery, html5), desde el backend (reglas y funciones de validación) y desde la base de datos, donde se pueden definir los tipos, cantidad de caracteres y otros parámetros que pueden ser configurados para este proceso.

En este ejemplo veremos un poco sobre estos 3 tipos de validación usando Laravel 5 y Eloquent y la validación por defecto de Html5.

Crear nueva base de datos

$ mysql -u root -p $ Enter password : 
$ mysql> CREATE DATABASE validation; 
$ mysql> exit;

Validación a nivel de base de datos con Eloquent

Si no conoces mucho sobre el uso de eloquent te recomiendo visitar este tutorial básico de Fluent y Eloquent 

Vamos a crear un modelo para registro de clientes haciendo uso de artisan

 $ php artisan make:model client 

ahora podemos editar la migración de la siguiente forma

 Schema::create(‘clients’, function(Blueprint $table) {     
$table->increments(‘id’);            
$table->string(‘full_name’)->required();            
$table->string(‘email’)->unique()->required();            
$table->string(‘address’)->required();            
$table->string(‘phone_number’)->nullable();            
$table->enum(‘type’,[‘empresa’,’particular’])->default(‘particular’);            
$table->string(‘register’)->nullable();            
$table->timestamps();
}); 

required() indica que el registro no puede quedar vacío y que es requerido el valor, unique() valida que un valor no pueda repetirse en la tabla, en este caso dos clientes no pueden tener registrado la misma dirección de email, los campos de tipo enum se usan para limitar las opciones que pueden ingresar al momento de registrar y el default() almacena un valor por defecto en caso de que el usuario no suministre ningún dato.

Por supuesto debemos ejecutar la migración para verificar que todo esté bien

 $ php artisan migrate 

editamos el archivo Client.php de la siguiente forma

 <?php
namespace App;
use Illuminate\Database\Eloquent\Model; 
class Client extends Model { 
protected $table = ‘clients’;         //Definimos los campos que se pueden llenar con asignación masiva        
protected $fillable = [‘full_name’, ‘email’, ‘address’, ‘register’,’phone_number’,’type’]; 

Este tipo de validación impide que se registre información que no cuente con los criterios definidos, pero en caso de que el registro falle no ofrece ninguna alerta al usuario, por ello necesitamos usar un método que permita un poco mas de interacción.

Validacion Html5

Iniciaremos creando un formulario (‘form.blade.php’) de registro para los datos establecidos en la migración usando Form() para facilitar el proceso

@extends(‘app’)
@section(‘content’) 
<div class=»container»>        
@if($errors->has())            
<div class=»alert alert-warning» role=»alert»>              
@foreach ($errors->all() as $error)                  
<div>{{ $error }}</div>              @endforeach            </div>        @endif </br>       <div class=»row»>        <div class=»col col-md-6 col-md-offset-3″   >            <div class=»panel panel-default»>              <div class=»panel-heading»><h3 class=»panel-title»>Forumulario de registro</h3></div>              <div class=»panel-body»>                {!! Form::open([‘route’ => ‘client’, ‘method’ => ‘post’]) !!}                                    <div class=»form-group»>                      {!! Form::label(‘full_name’, ‘Nombre’) !!}                      {!! Form::text(‘full_name’, null, [‘class’ => ‘form-control’ , ‘required’ => ‘required’]) !!}                  </div>                  <div class=»form-group»>                      {!! Form::label(‘email’, ‘E-Mail’) !!}                      {!! Form::email(‘email’, null, [‘class’ => ‘form-control’ , ‘required’ => ‘required’]) !!}                  </div>                            <div class=»form-group»>                      {!! Form::label(‘address’, ‘Direccion’) !!}                      {!! Form::text(‘address’, null, [‘class’ => ‘form-control’ , ‘required’ => ‘required’]) !!}                  </div>                  <div class=»form-group»>                      {!! Form::label(‘phone_number’, ‘Telefono’) !!}                      {!! Form::text(‘phone_number’, null, [‘class’ => ‘form-control’ ]) !!}                  </div>                  <div class=»form-group»>                      {!! Form::label(‘type’, ‘Tipo’) !!}                      {!! Form::select(‘type’, [‘otro’ => ‘otro’, ‘empresa’ => ‘empresa’, ‘particular’ => ‘particular’], null, [‘class’ => ‘form-control’ ]) !!}                  </div>                  <div class=»form-group»>                      {!! Form::label(‘register’, ‘Numero de registro’) !!}                      {!! Form::text(‘register’, null, [‘class’ => ‘form-control’ ]) !!}                  </div>                  <div class=»form-group»>                      {!! Form::submit(‘Enviar’, [‘class’ => ‘btn btn-success ‘ ] ) !!}                  </div>                {!! Form::close() !!}              </div>            </div>         </div>    </div></div>@endsection 

ahora creamos un controlador para clientes llamado ClientController

 $ php artisan make:controller ClientController 
 Route::get(‘client’, [‘as’ => ‘client’, ‘uses’ => ‘ClientController@index’]); Route::post(‘client’, [‘as’ => ‘client’, ‘uses’ => ‘ClientController@store’]); 

Creamos la funcion que nos retorna el formulario de registro

  public function index() { return \View::make(‘form’); } 

Si intentamos guardar nos aparecerá un error de validación en pantalla ya que definimos ciertos atributos al crear el formulario como ‘required = required’ y para el email no usamos un campo de texto sino uno de tipo email (Html5), por lo cual veremos algo como lo siguiente

En nuestro siguiente articulo te vamos a compartir más información de como hacer tus validaciones en Laravel. En los que trataremos los siguientes temas:

*Agregar validación

*Traducir los mensajes de validación de Laravel

Conservar los datos del formulario luego de un error de validación

Leave a Reply