AutoCarga de Objetos KumbiaPHP

De KumbiaPHP Framework Wiki
Saltar a: navegación, buscar


Contenido

[editar] Sobre la AutoCarga de Objetos

En KumbiaPHP Framework existe una implementación que ahorra muchísimo trabajo y como la intención es aprovechar al máximo las bondades del framework, en este sentido tenemos la AutoCarga de Objeto, la cual como su nombre indica asocia un campo de formulario (form) a una tabla y campo de la BD.

KumbiaPHP Framework implementa la AutoCarga de Objeto la cual siguiendo una convención mínima model.field donde el model es "menus", es decir existe una tabla llamada "menus" y field (campo) serán los campos de esa tabla.

Veamos la estructura de tabla menus:

CREATE TABLE menus
(
 id           int            unique not null auto_increment,
 nombre       varchar(100),
 titulo       varchar(100)   not null,
 primary key(id),
)

En concordancia con los fields (campos) de la tabla "menus" se indica el comportamiento de la AutoCarga de Objeto para que el controller no tenga que recoger cada uno de los valores enviado por POST.

Para este caso haremos en los helpers:

text_field_tag(array('menus.titulo'))

En la Beta2

Form::text('menus.titulo')

Automáticamente cuando ese valor vaya al action menus/create KumbiaPHP interpreta que existe una tabla "menus" con un campo "titulo" y si vemos la estructura de la tabla es así.

[editar] La Vista (create.phtml)

  1. <?php View::content(); ?>
  2. <?php echo form_tag('menus/create/') ?>
  3. <table>
  4.     <tr>
  5.         <td>Nombre:</td>
  6.         <td><?php echo text_field_tag(array('menus.nombre')) ?></td>
  7.     </tr>
  8.     <tr>
  9.         <td>Titulo:</td>
  10.         <td><?php echo text_field_tag(array('menus.titulo')) ?></td>
  11.     </tr>   
  12.     <tr>
  13.         <td>&nbsp;</td>
  14.         <td><?php echo submit_tag('Agregar') ?></td>
  15.     </tr>
  16. </table>
  17. <?php echo end_form_tag() ?>

En la Beta2

  1. <?php View::content(); ?>
  2. <?php echo Form::open('menus/create/') ?>
  3. <table>
  4.     <tr>
  5.         <td>Nombre:</td>
  6.         <td><?php echo Form::text('menus.nombre') ?></td>
  7.     </tr>
  8.     <tr>
  9.         <td>Titulo:</td>
  10.         <td><?php echo Form::text('menus.titulo') ?></td>
  11.     </tr>   
  12.     <tr>
  13.         <td>&nbsp;</td>
  14.         <td><?php echo Form::submit('Agregar') ?></td>
  15.     </tr>
  16. </table>
  17. <?php echo Form::close() ?>

[editar] El Modelo Menus (menus.php)

<?php
 
    class Menus extends ActiveRecord{
 
    }
 
?>

[editar] AutoCarga en el Controller (menus_controller.php)

Ahora vemos el código que se utiliza en controllers/menus_controller.php en su acción create().

  1.  <?php
  2.  /**
  3.      * Crea un Controlador para el menu
  4.      *
  5.      */
  6.     Load::model('menus');
  7.  
  8. class MenusController extends ApplicationController
  9. {
  10.  
  11.     public function create ()
  12.     {
  13.         /**
  14.          * Se verifica si el usuario envio el form (submit) y si ademas 
  15.          * dentro del array POST existe uno llamado "menus"
  16.          * el cual aplica la autocarga de objeto para guardar los 
  17.          * datos enviado por POST utilizando autocarga de objeto
  18.          */
  19.         if($this->has_post('menus')){
  20.             /**
  21.              * se le pasa al modelo por constructor los datos del form y ActiveRecord recoge esos datos
  22.              * y los asocia al campo correspondiente siempre y cuando se utilice la convención
  23.              * model.campo
  24.              */
  25.             $menu = new Menus($this->post('menus'));
  26.             //En caso que falle la operación de guardar
  27.             if(!$menu->save()){
  28.                 Flash::error('Falló Operación');
  29.                 //se hacen persistente los datos en el formulario
  30.                 $this->menus = $this->post('menus');
  31.                 /**
  32.                  * NOTA: para que la autocarga aplique de forma correcta, es necesario que llame a la variable de instancia
  33.                  * igual como esta el model de la vista, en este caso el model es "menus" y quedaria $this->menus
  34.                  */
  35.             }
  36.         }
  37.         else
  38.         {
  39.            Flash::success('Operación exitosa: datos Guardado');
  40.         }
  41.     }
  42. }
  43. ?>

Para la Beta2

  1.  <?php
  2.  /**
  3.      * Crea un Controlador para el menu
  4.      *
  5.      */
  6.     Load::model('menus');
  7.  
  8. class MenusController extends ApplicationController
  9. {
  10.  
  11.     public function create ()
  12.     {
  13.         /**
  14.          * Se verifica si el usuario envio el form (submit) y si ademas 
  15.          * dentro del array POST existe uno llamado "menus"
  16.          * el cual aplica la autocarga de objeto para guardar los 
  17.          * datos enviado por POST utilizando autocarga de objeto
  18.          */
  19.         if(Input::hasPost('menus')){
  20.             /**
  21.              * se le pasa al modelo por constructor los datos del form y ActiveRecord recoge esos datos
  22.              * y los asocia al campo correspondiente siempre y cuando se utilice la convención
  23.              * model.campo
  24.              */
  25.             $menu = new Menus(Input::post('menus'));
  26.             //En caso que falle la operación de guardar
  27.             if(!$menu->save()){
  28.                 Flash::error('Falló Operación');
  29.                 //se hacen persistente los datos en el formulario
  30.                 $this->menus = Input::post('menus');
  31.                 /**
  32.                  * NOTA: para que la autocarga aplique de forma correcta, es necesario que llame a la variable de instancia
  33.                  * igual como esta el model de la vista, en este caso el model es "menus" y quedaria $this->menus
  34.                  */
  35.             }
  36.         }
  37.         else
  38.         {
  39.            Flash::success('Operación exitosa: datos Guardado');
  40.         }
  41.     }
  42. }
  43. ?>

[editar] Descarga este ejemplo

Descarga: app_autocarga_objetos.zip para el core del beta1

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Desarrollo
Categorías
Manual 1.0
KumbiaPHP Framework
Herramientas