Inserción de un objeto Borrado de un objeto

Editado de un objeto


En este ejercicio identificaremos como funciona la función update_data del orm.
El ejercicio consiste en editar la información del jefe con documento igual a 1, pero se puede modificar para editar cualquier jefe enviando por post o get el código del jefe a editar.
Primero procederemos a crear el controlador y el template para este ejercicio, del siguiente modo:

1) Creamos el controlador example_orm_update.php en la ruta: work/example_orm_update.php con la siguiente información:

<?php

require('configs/include.php');

class 
c_example_orm_update extends super_controller {
    
    public function 
edit()
    {
        
$boss = new boss($this->post);
        
$boss->auxiliars=unserialize(base64_decode($this->post->auxiliars));
        
$boss->exceptions();

        
$this->orm->connect();
        
$this->orm->update_data("normal",$boss);
        
$this->orm->close();
        
        
$this->engine->assign('type_warning','success');
        
$this->engine->assign('msg_warning',"Element update satisfactory");
        
$this->temp_aux2 'message.tpl';
        
$this->temp_aux 'empty.tpl';
    }

    public function 
display()
    {
        if(
is_empty($this->get->option))
        {
            
$cod['boss']['document']=1;
            
$cod['boss']['attributes']=array("document");
            
$options['boss']['lvl2']="by_attributes";
        
            
$this->orm->connect();
            
$this->orm->read_data(array("boss"),$options,$cod);
            
$boss $this->orm->get_objects("boss");
            
$boss[0]->auxiliars=$boss[0]->pre_edit();
            
$this->orm->close();
            
$this->engine->assign('boss',$boss[0]);
        }
        
        
$this->engine->display('header.tpl');
       
        if(
$this->error==1)
        {
            
$boss = new boss($this->post);
            
$boss->auxiliars $this->post->auxiliars;
            
$this->engine->assign('boss',$boss);
            
$this->engine->assign('type_warning',$this->type_warning);
            
$this->engine->assign('msg_warning',$this->msg_warning);
            
$this->temp_aux2 'message.tpl';
        }
        
        
$this->engine->display($this->temp_aux2);
        
$this->engine->display($this->temp_aux);
        
$this->engine->display('footer.tpl');
    }
    
    public function 
run()
    {
        
$this->temp_aux 'example_orm_update.tpl';
        try {if (isset(
$this->get->option)){$this->{$this->get->option}();}}
        catch (
Exception $e) {$this->error=1$this->msg_warning=$e->getMessage();}    
        
$this->display();
    }
}

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

?>

2) Creamos el template example_orm_update.tpl en la ruta: work/templates/t_dark/example_orm_update.tpl con la siguiente información:

<form class="well form-search" method="post" action="{$gvar.l_global}example_orm_update.php?option=edit">
<legend>Edit a Boss</legend>
<fieldset>
<table cellspacing="2">
<tr><td>Nombre: <input type="text" name="name" value="{$boss->get('name')}" /></td>
<td>Documento: <input type="text" name="document" value="{$boss->get('document')}" />
</td></tr>
<tr><td>Cargo: <input type="text" name="charge" value="{$boss->get('charge')}" /></td></tr>
<tr><td><input type="hidden" name="auxiliars" value="{$boss->auxiliars}" />

<input class="btn btn-primary" type="submit" value="Update"></td></tr>
</table>
</fieldset>
</form>

Finalmente se accede por navegador a work/example_orm_update.php y se editan los datos.

$this->orm->update_data(par1, par2)

- par1: recibe el case de nivel 2 que se va a ejecutar dentro la función udpate (el tipo de update que se desea realizar). El update_data solo puede editar 1 dato a la vez (en el caso del ejemplo el valor del par1 es igual a "normal" que es el caso por defecto que crea el CRUD en el db.php para la edición de datos).
- par2: recibe el objeto que se va a editar en la base de datos (en este caso $boss).

Nota:
  • Siempre que se editen datos, se deberán guardar los valores iniciales en el array auxiliars (vector propio de cada clase). Esto debido a que en algunos casos se puede editar la clave primaria, (por ejemplo el documento) y si no se guarda el valor inicial en algún lado no se podrá realizar la edición de datos.
  • Para guardar esos valores iniciales se utiliza la función pre_edit() que heredan todas las clases, y que convierte todos los datos iniciales del objeto en base64 (para mayor seguridad), y una vez se recogen los datos y antes de realizar la inserción se debe decodificar esa base 64.

En el ejemplo anterior accediendo a $boss->auxiliars["document_aux"] podremos encontrar el documento inicial del objeto y este documento el que se utiliza dentro del gestor de bases de datos para saber que elemento se debe modificar.

Resultado en versiones anteriores:
example12.png
Inserción de un objeto Borrado de un objeto