Comunidad de diseño web y desarrollo en internet online

Introducción a Codeigniter (II): la librería form_validation

Buenas mis amigos, ahora les traigo la segunda parte del tutorial Introducción a Codeigniter, pido disculpas por la tardanza en la realización de este tutorial, pues andamos con algunos emprendimientos.



Bueno ahora vamos a explicar un poco el uso de la librería form_validation la cual es la encargada de realizar las diferentes validaciones que podemos hacer a un formulario de forma sencilla. Entonces si recordamos un poco lo realizado en el anterior Tutorial de Codeigniter, tenemos un controlador llamado "video.php" en el constructor de este lo que hacemos es llamar a la librería "form_validation" usando la línea de código:

Código :

$this->load->library('form_validation');

Quedando el contructor del controlador de la siguiente manera:

Código :

function __construct()
{
   parent::__construct();
   $this->load->helper('form');
   $this->load->model('video_model');
   $this->load->library('form_validation');
}

Con esto ya tenemos activada la librería para poder utilizarla dentro de todo nuestro controlador, ahora en la función save del controlador lo que hacemos es usar las siguientes instrucciones:

Código :

if ($this->form_validation->run() == FALSE)
{
   //Acción a tomar si existe un error el en la validación
}
else
{
   //Acción a tomas si no existe ningun error
}


Explicando un poco el anterior código observamos que $this->form_validation->run() es la función encargada de verificar si existe un error en las validaciones del formulario.

Entonces la función save del controlador quedaría de la siguiente manera:

Código :

function save()
{
   $config['upload_path'] = './images/portada/';
   $config['allowed_types'] = 'jpg|JPG|jpeg|JPEG|png|PNG';
   $config['remove_spaces'] = TRUE;
   $config['max_size'] = '1024';
    
   $this->load->library('upload', $config); 

   if ($this->form_validation->run() == FALSE)
   {
      $this->new_video();   
   }
   else
   {
      if ( ! $this->upload->do_upload())
      {
         $error = $this->upload->display_errors();
         $this->new_video($error);
      }
      else
      {
         $data = $this->upload->data();
         $titulo = $this->input->post('titulo');
         $costo = $this->input->post('costo');
         $formato = $this->input->post('formato');
         $portada = $data['file_name'];
         $insert = $this->video_model->insert($titulo, $costo, $formato, $portada);
         if($insert)
         {
            redirect('/video/', 'refresh');
         }
         else
         {
            $this->new_video();
         }
      }
   }
}


Lo que hacemos en la función es agregar la validación del formulario antes de que se realice la subida de la imagen al servidor, ahora en caso de que exista algún error lo único que hacemos es volver a cargar el formulario, en este caso llamando a la función new_video. En el caso de que no exista ningún error procedemos a realizar todo el proceso que ya se tenía anteriormente.

Pero eso no basta para realizar las validaciones ya que tenemos que crear las reglas de validación para los diferentes inputs que tenga nuestro formulario, ahora la forma de crear una regla de validación es la siguiente:

Código :

$this->form_validation->set_rules('name_input', 'Identificador', 'reglas de validación');

Lo que hacemos con esta línea de código es crear diferentes reglas de validación para una determinada caja de texto reconociendo por el name que esta tiene, que es el primer parámetro que recibe la función de validación. El segundo parámetro es el nombre con el que se identificará el input en el mensaje de error, y el tercer parámetro son las diferentes reglas de validación que se pueda tener, separadas por el símbolo "|".

Reglas de Validación



Ahora iremos explicando las reglas de validación más usuales para después empezar a usar las que necesite nuestro proyecto:
  • valid_email: Es la encargada de verificar si un campo input tiene el formato de correo electrónico ([email protected]).
  • required: Es la encargada de verificar si un campo input no esté vacío.
  • matches: Es la encargada de verificar que dos inputs sean iguales (matches[inputacomparar]).
  • is_unique: Se encarga de verificar que el valor del input no esté registrado en la base de datos (is_unique[tabla.columna]).
  • min_length, max_length: Se encarga de verificar la cantidad mínima y máxima de caracteres que puede tener un input (min_length[num], max_length[num]).
  • integer: Se encarga de verificar que el valor de un campo input sea entero.


Ya teniendo una idea básica de algunas reglas de validación que posee codeigniter ahora nos toca ponerlas en nuestra función para empezar a validar nuestro formulario.

Para ello aumentamos las siguientes líneas de código antes de verificar si el formulario tiene errores, es decir antes de la línea if ($this->form_validation->run() == FALSE):

Código :

$this->form_validation->set_rules('titulo', 'Titulo de Video', 'trim|required|max_length[20]|is_unique[info_video.titulo]');
$this->form_validation->set_rules('costo', 'Costo de Video', 'trim|required|integer');
$this->form_validation->set_rules('formato', 'Formato de Video', 'trim|required');

Lo que tenemos en el anterior código son validaciones que posee nuestro formulario, no validamos el campo de selección de imagen ya que ésta tiene sus propias validaciones que posee la librería que usamos para subir el archivo a nuestro servidor, pero esto no es todo, ahora nos toca modificar un poco nuestro archivo de vista new_video.php, para que en ésta se puedan mostrar los errores que puedan existir en el formulario, también modificando un poco los inputs para que la información que poseen no se pierda en caso de que exista algún error. Para mostrar los errores usamos la siguiente línea:

Código :

<?=validation_errors(); ?>

Esta línea es la que nos permite visualizar los errores generados por las reglas de validación, por defecto estos errores se los encierra dentro de párrafos, para personalizar un poco estos errores lo que haremos es encerrarlos dentro de un div, y lo que hacemos es enviar el div como parámetros, el primer parámetro la etiqueta de apertura y el segundo parámetro el cierre de la etiqueta, quedando de la siguiente manera:

Código :

<?=validation_errors('<div class="errors">','</div>'); ?>

Esto nos mostrará los errores encerrados en la etiqueta div para poder manejarlos de manera más fácil con css o javascript.

Con esta breve explicación nuestro archivo de vista quedará de la siguiente manera, ya con los inputs modificados:

Código :

<h4>Seleccione una imagen un tamaño no mayor a 1Mb</h4>
<p><?=$error?></p>
<?=validation_errors('<div class="errors">','</div>'); ?>
<?php echo form_open_multipart('video/save');?>
   <p>
      <?=form_label('Titulo Video:', 'titulo')?>
      <?=form_input(array('name'=>'titulo', 'id'=>'titulo', 'type'=>'text', 'value'=>set_value('titulo'), 'placeholder' => 'Ingrese el Titulo del Video', 'autofocus'=>'autofocus', 'size'=>'50'))?>
   </p>
   <p>
      <?=form_label('Costo Video:', 'costo')?>
        <?=form_input(array('name'=>'costo', 'id'=>'costo', 'type'=>'text', 'value'=>set_value('costo'), 'placeholder' => 'Ingrese el Costo del Video', 'size'=>'50'))?>
   </p>
   <p>
      <?=form_label('Formato Video:', 'formato')?>
        <?=form_input(array('name'=>'formato', 'id'=>'formato', 'type'=>'text', 'value'=>set_value('formato'), 'placeholder' => 'Ingrese el Formato del Video', 'size'=>'50'))?>
   </p>
    <p>
       <?=form_label('Seleccione una Imagen', 'image')?>
        <?=form_input(array('name'=>'userfile', 'id'=>'userfile', 'type'=>'file', 'size'=>'20'))?>
    </p>
   <br><?= form_submit('Guardar', 'Guardar')?>
<?=form_close()?>


Ahora notamos que la forma de crear los inputs cambió, ya que ahora le enviamos como parámetro un array dentro del cual especificamos las características que tendrá nuestro input. Esta forma de crear inputs en codeigniter es muy útil ya que creando de esta forma inputs podemos usar particularidades de HTML5 pertenecientes a los inputs.

Otra cosa que notamos dentro de los inputs es el uso de "set_value", esto nos permite que la información que posee el input, no se pierda en caso de que se genere algún error. Ahora sí estamos en la posibilidad de hacer diferentes pruebas a nuestro formulario para verificar si es que la reglas de validación usadas funcionen correctamente.

Una vez realizado esto, notamos que todos los mensajes de error generados se encuentran en inglés, pero codeigniter nos da la opción de personalizar los mensajes de error con la siguiente línea de código:

Código :

$this->form_validation->set_message('regladevalidacion', 'mensajepersonalizado');

Ahora nuestros mensajes personalizados lo ponemos debajo de nuestras reglas de validación, teniendo así las siguientes líneas de código:

Código :

$this->form_validation->set_message('required', 'El campo %s es obligatorio');
$this->form_validation->set_message('integer', 'El campo %s deve poseer solo numeros enteros');
$this->form_validation->set_message('is_unique', 'El campo %s ya esta registrado');
$this->form_validation->set_message('required', 'El campo %s es obligatorio');
$this->form_validation->set_message('max_length', 'El Campo %s debe tener un Maximo de %d Caracteres');

De esta manera es como vamos personalizando los mensajes de error para las diferentes reglas de validación, notar que para reconocer el identificador de input usamos "%s", que es donde se remplazará el identificador de input que tenemos en la regla de validación, la regla de "max_length" que posee el valor máximo usamos "%d" para que sea remplazado por dicho valor numérico.

Los archivos del proyecto se encuentran en github incluyendo un archivo .sql con la tabla que usamos para el proyecto. No se olviden realizar las configuraciones a la base de datos para que lo puedan utilizar.

Con esto concluye este tutorial de Introducción a Codeigniter: uso de la librería form_validation, y otra vez disculpas por el retraso en la publicación de este tutorial, ahora tratando de seguir aportando con información de este framework que es super fácil de aprender.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate