Professional Documents
Culture Documents
VALIDACIONES EN LARAVEL
Uso bsico
Laravel viene acompaado de una simple y conveniente habilidad de validacin de datos
y recuperacin de mensajes de error mediante la clase Validation.
Ejemplo de validacin bsica
$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => 'required|min:5')
);
El primer argumento que se le debe enviar al mtodo make es el conjunto de datos a
validar. El segundo argumento son las reglas a ser aplicadas al conjunto de datos.
Utilizar arrays para definir reglas
Varias reglas pueden delimitarse ya sea usando el carcter "|" (pipe o barra vertical) o
como elementos separados de un array.
$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => array('required', 'min:5'))
);
Validando mltiples campos
$validator = Validator::make(
array(
'name' => 'Dayle',e
alpha
El campo bajo validacin debe contener nicamente caracteres alfabticos.
alpha_dash
El campo bajo validacin puede contener caracteres alfanumricos, as como guiones
altos y bajos.
alpha_num
El campo bajo validacin debe contener nicamente caracteres alfanumricos.
array
El campo bajo validacin debe ser del tipo array.
before:date
El campo bajo validacin debe ser una fecha anterior a la fecha dada. Las fechas sern
pasadas a la funcin strtotime de PHP.
between:min,max
El campo bajo validacin debe tener un tamao entre los dados min y max. Cadenas,
nmeros y archivos son evaluados del mismo modo, al igual que la regla size.
confirmed
El campo bajo validacin debe contener un campo coincidente de foo_confirmation. Por
ejemplo,
si
el
campo
validar
fuera
password,
un
campo
El campo bajo validacin debe contener una longitud de entre min y max..
Email
El campo a validar estar correctamente formateado como una direccin e-mail.
exists:table,column
El campo bajo validacin debe existir en una tabla de la base de datos dada.
Uso bsico de la regla 'exists'
'state' => 'exists:states'
Especificar un nombre de columna personalizado
'state' => 'exists:states,abbreviation'
Puedes adems especificar ms condiciones que sern aadidas como clausulas "where"
a la consulta:
'email' => 'exists:staff,email,account_id,1'
Pasando NULL como valor de la clausula "where" comprobar valores NULL en la base
de datos:
'email' => 'exists:staff,email,deleted_at,NULL'
image
El archivo bajo validacin debe ser una imagen (jpeg, png, bmp o gif)
in:foo,bar,...
El campo bajo validacin debe estar incluido en lista de valores dados.
integer
El campo bajo validacin debe ser un valor entero.
ip
El campo a validar debe estar correctamente formateado como una direccin IP.
max:value
El campo a validar debe ser inferior o igual al mximo value. Cadenas, nmeros y
archivos son evaluados del mismo modo que la reglasize.
mimes:foo,bar,...
El archivo a validar debe ser del tipo MIME que corresponda a alguno de los listados.
Uso bsico de la regla MIME
value
corresponde
al
nmero
de
caracteres.
Para
datos
ELOQUENT
(Gaitan, 2013) dice: Una de las cosas ms densas, pero necesarias al desarrollar una
aplicacin web es tener que crear las consultas para la base de datos, adems que estas
consultas suelen repetirse entre tabla y tabla. Insertar registros, modificarlos,
eliminarlos, buscar un registro por su id, listar registros, etc. Eloquent es una clase ORM
de Laravel que nos permitir solucionar este problema.
Para comenzar vamos a crear un modelo para representar la tabla que creamos, la
tablausers. As que dentro de nuestro proyecto vamos a app -> models y creamos un
archivo php llamado User.php. Probablemente ya exista un modelo con este nombre ya
que Laravel 4 lo crea por defecto, de ser as lo eliminamos. El cdigo quedar as:
<?php
class User extends Eloquent {
}
?>
Ahora, tal vez no lo hayas notado, pero la tabla se en la base de datos para guardar se
llama users, mientras que el modelo es User. Bueno, esto se debe a una modalidad de
Laravel en donde las tablas se escriben en plural, mientras que los modelos con la primer
letra en mayscula y en singular. Si nuestra tabla tuviese otro nombre que no respetara
esta regla entonces tendramos que forzar a nuestro modelo a llamar a una tabla con
otro nombre, agregando una propiedad protegida $table de esta forma:
<?php
class User extends Eloquent {
protected $table = 'otro_nombre_para_la_tabla';
}
?>
Pero como no es nuestro caso, entonces dejaremos la clase cmo estaba antes y Laravel
dar por hecho que el modelo User har referencia a la tabla users.
Ok, ahora, para continuar vamos a aprender qu es lo que podemos hacer gracias
aEloquent.
En primer lugar vamos a ir a app -> routes.php y vamos a agregar las siguientes lneas:
Route::get('test', function(){
$user->real_name = 'cosme';
$user->password = Hash::make('1234');
$user->level = 1;
$user->active = true;
Algo a tener en cuenta es que el password lo guardamos hasheado, gracias a la
claseHash y el mtodo make(). Seguro, si ya trabajaste con bases de datos y con
contraseas sabrs que por una cuestin de seguridad las contraseas deberan
guardarse hasheadas o encriptadas.
Finalmente para guardar el registro usamos el mtodo save() y retornamos un mensaje
indicando que el registro se ha insertado:
$user->save();
return 'Usuario insertado correctamente.';
Recuperar registros por su id
Si quisiramos recuperar, por ejemplo, el registro que acabamos de insertar por su id o
clave primaria deberamos usar el mtodo esttico find() que recibir como parmetro
el id del usuario y nos devolver un objeto con el registro del mismo:
$user = User::find(1);
return $user->real_name;
Donde es 1, debe ir el id correspondiente.
Modificar registros
Combinando lo ltimo que acabamos de aprender podemos modificar un registro,
primero recuperndolo con el mtodo find(), seteando la propiedades que queremos
modificar y por ltimo llamar al mtodo save() para que los cambios se realicen en la
base de datos:
Route::get('test', function() {
$user = User::find(1);
$user->real_name = 'fulanito';
$user->save();
return 'El registro ha sido modificado';
});
});
Pero si en cambio queremos hacer un filtro, por ejemplo recuperar todos los usuarios
con el valor de la propiedad active en true, y ordenados por el real_name deberamos
hacer algo como esto:
Route::get('test', function() {
$users = User::where('active', true)->orderBy('real_name')->get();
$nombres = '';
foreach($users as $item){
$nombres .= $item->real_name . '<br />';
}
return $nombres;
});
Como se ve en el ejemplo a travs de la clase User llamamos el mtodo where(), para
traer todos los registros que cumplan con esa condicin, que sean active true, adems
encadenamos el mtodo orderBy() para ordenar esos registros por su real_name, y
finalmente llamamos al mtodo get() que nos devolver un array con los registros
encontrados.
BIBLIOGRAFIA:
http://laraveles.com/docs/4.1/validation#rule-accepted
http://fernando-gaitan.com.ar/laravel-parte-5-modelos/