Get y Set Basic exceptions

Exceptions


Todas las clases tienen una serie de condicionales (también llamadas invariantes) que permiten validar o no si un nuevo objeto realmente puede pertenecer a esa clase.
Estas funciones son muy usadas para verificar que los datos de los atributos de los objetos estén bien creados antes de registrar o editar un nuevo objeto a la base de datos.

Por ejemplo: supongamos que queremos agregar un objeto person a la base de datos, antes de agregarlo debemos verificar cosas como:
  1. Que los atributos document, name, lastname y age no estén vacíos (esto debido a que así se definió en la creación de la clase, en la función metadata() en la parte de los "required").
  2. Que tanto document, como age sean variables tipo Int (esto debido a que así se definió en la creación de la clase, en la función metadata() en la parte de los "type").
  3. Que todos los atributos no contentan mas de 30 caracteres (esto debido a que así se definió en la creación de la clase, en la función metadata() en la parte de los "length")

Una vez verificadas estas 3 condiciones se podrá proceder a registrar el objeto normalmente en la base de datos (este último paso lo dejaremos para tutoriales posteriores donde se explique la capa ORM).

De esto se encarga esta función de verificar 2 cosas, primero las excepciones correspondientes a la creación de la clase, en las que están las excepciones de tipo, de requerido, de tamaño y de valores validos (será profundizada mas adelante) (basic_exceptions()); y segundo se encarga de verificar las excepciones propias de la clase (additional_exceptions()). Ambas serán analizadas en mayor detalle en tutoriales posteriores.

Nota: en caso de que se encuentre un error esta función lanza una excepción, que es atrapada normalmente por un TRY y un CATCH definido en la función de run.

- Creemos el controlador example_exceptions.php en la ruta work/example_exceptions.php con el siguiente contenido:

<?php

require('configs/include.php');

class 
c_example_exceptions extends super_controller {
    
    public function 
add()
    {
        
$person = new person($this->post);
        
$person->exceptions();
        
        
//here will be the lines for add to db... check chapter of ORM
        
        
$this->temp_aux 'message.tpl';
        
$this->engine->assign('type_warning',"success");
        
$this->engine->assign('msg_warning',"Persona agregada correctamente");
    }

    public function 
display()
    {
        
$this->engine->display('header.tpl');
        
$this->engine->display($this->temp_aux);
        
$this->engine->display('example_exceptions.tpl');
        
$this->engine->display('footer.tpl');
    }
    
    public function 
run()
    {
        try {if (isset(
$this->get->option)){$this->{$this->get->option}();}}
        catch (
Exception $e) {$this->error=1$this->msg_warning=$e->getMessage(); 
        
$this->temp_aux 'message.tpl'$this->engine->assign('type_warning',$this->type_warning); 
        
$this->engine->assign('msg_warning',$this->msg_warning);}  
        
        
$this->display();
    }
}

$call = new c_example_exceptions();
$call->run();

?>

- Creemos el template example_exceptions.tpl en la ruta work/templates/t_dark/example_exceptions.tpl con el siguiente contenido:

<form class="well form-search" method="post" action="{$gvar.l_global}example_exceptions.php?option=add">
<legend>Agregar una persona</legend>
<fieldset>
<table cellspacing="2">
<tr><td>Ingrese el nombre:* <input name="name" type="text"></td>
<td>Ingrese el apellido:* <input name="lastname" type="text"></td></tr>
<tr><td>Ingrese el documento:* <input name="document" type="text"></td>
<td>Ingrese la edad:* <input name="age" type="text"></td></tr>
<tr><td>Ingrese el jefe: <input name="boss" type="text"></td></tr>
<tr><td><input class="btn btn-primary" type="submit" value="Registrar"></td></tr>
</table>
</fieldset>
</form>

El anterior ejemplo creará una persona de acuerdo a los datos que le ingresemos por el template.
Probar con los siguiente:
1) Dejar todos los campos en blanco y dar clic en registrar (veremos que saca un aviso diciendo que varios campos están vacíos).
2) Donde dice edad, copiar letras en lugar de números (veremos que saca un aviso diciendo que la edad debe ser un valor entero).

En este ejemplo vemos el funcionamiento de las variables: $temp_aux, $msg_warning, $type_warning y $error propias del super controlador que fueron descritas en tutoriales anteriores

Nota: el template message.tpl es un template prediseñado de G que se usa generalmente para mostrar mensajes o avisos y al cual siempre se le debe asignar un tipo de alerta y un mensaje de alerta (type_warning, msg_warning).

Parámetros opcionales:

Es importante agregar que esta función recibe 2 parámetros opcionales ($list y $check).
Por defecto esta función chequea todos y cada uno de los atributos principales de la clase, pero puede darse el caso en el que no queremos verificar todos los atributos si no solo algunos, para eso se usar esos parámetros adicionales.

$list: es un vector que contiene nombres de algunos atributos de la clase.
$check: es una variable que puede ser: 'check' o 'not check'
- En el caso de que sea check quiere decir que verificara los datos de todos los atributos que se envien en list
- En el caso de que sea not check quiere decir que verificara los datos de todos los atributos que NO se envíen en list. (mas adelante se desarrollara un ejemplo con esta función).
Get y Set Basic exceptions