Edición de «Como hacer un CRUD en KumbiaPHP Framework»

De KumbiaPHP Framework Wiki

Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.

Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.

Revisión actual Tu texto
Línea 1: Línea 1:
{{cleanupbox
+
Este manual nos permitirá de manera sencilla conocer y entender la implementación de un CRUD (Create, Read, Update y Delete en inglés) sin la necesidad de un Scaffold (<s>StandardForm</s>).
|image=[[Archivo:Information_icon4.png|45px]]
 
|texto ='''Este Artículo cumple con todos los requererimientos de los Kumbieros.'''<br />
 
}}
 
{{cleanupbox
 
|texto ='''Este ejemplo es funcional para la [[KumbiaPHP_Framework_Versión_1.0_Spirit | Versión Beta1]]'''<br />
 
}}
 
== Texto de titular ==
 
Este ejemplo nos permitirá de manera sencilla conocer y entender la implementación de un CRUD (Create, Read, Update y Delete en inglés) sin la necesidad de un Scaffold (<s>StandardForm</s>) y un manejo correcto del MVC en KumbiaPHP.
 
  
== Configurando database.ini ==
+
==Paso 1==
Configurar el archivo [[KumbiaPHP_Framework_Versión_1.0_Spirit#databases.ini|databases.ini]], con los datos y motor de Base de Datos a utilizar.
+
'''Crear el Modelo''' el cual esta viene dado por la difinición de una tabla en la BD, para efecto del ejemplo creamos la siguiente tabla en la BD (la misma del ejemplo de [[AutoCarga_de_Objetos_KumbiaPHP | Auto Carga de Obejtos]])
 
 
== Modelo ==
 
'''Crear el Modelo''' el cual esta viene dado por la definición de una tabla en la BD, para efecto del ejemplo creamos la siguiente tabla (la misma del ejemplo de [[AutoCarga_de_Objetos_KumbiaPHP | Auto Carga de Objetos]])
 
  
 
<pre>
 
<pre>
Línea 21: Línea 10:
 
  nombre      varchar(100),
 
  nombre      varchar(100),
 
  titulo      varchar(100)  not null,
 
  titulo      varchar(100)  not null,
  primary key(id)
+
  primary key(id),
 
)
 
)
 
</pre>
 
</pre>
Línea 35: Línea 24:
 
     * Retorna los menu para ser paginados
 
     * Retorna los menu para ser paginados
 
     *
 
     *
    */
+
    /*
 
     public function getMenus($page, $ppage=20)
 
     public function getMenus($page, $ppage=20)
 
     {
 
     {
Línea 43: Línea 32:
 
</source>
 
</source>
  
== Controller ==
+
== Paso 2 ==
  
 
El controlador es encargado de atender las peticiones del cliente (ej. browser) y a su vez de darle una respuesta. En este controller vamos a definir todas las operaciones CRUD que necesitamos.
 
El controlador es encargado de atender las peticiones del cliente (ej. browser) y a su vez de darle una respuesta. En este controller vamos a definir todas las operaciones CRUD que necesitamos.
  
En esta parte es importante que se haya visto el [[AutoCarga_de_Objetos_KumbiaPHP | Tutorial de Auto Carga de Objetos]]
+
En esta parte es importante que se haya visto el [[AutoCarga_de_Objetos_KumbiaPHP | Tutorial de Auto Carga de Obejtos]]
  
 
'''''[app]/controllers/menus_controller.php:'''''
 
'''''[app]/controllers/menus_controller.php:'''''
  
<source lang="php" line>
+
<source lang="php">
 
<?php
 
<?php
/**
 
* Carga del modelo Menus...
 
*/
 
Load::models('menus');
 
 
 
class MenusController extends ApplicationController {
 
class MenusController extends ApplicationController {
 +
    //Carga del modelo Menus, porque tenemos la autocarga de modelos desactivada (off)
 +
    public $models = array('menus'); 
  
 
     /**
 
     /**
     * Obtiene una lista para paginar los menus
+
     * Obtiene una lista para paginar de los menus
 
     */
 
     */
 
     public function index($page=1)  
 
     public function index($page=1)  
 
     {
 
     {
         $menu = new Menus();
+
         $this->listMenus = $this->Menus->getMenus($pages);
         $this->listMenus = $menu->getMenus($page);
+
    }
 +
   
 +
    /**
 +
    * Función que muestra la información
 +
    * partes de máquina. Se consulta a través de su identificador
 +
    */
 +
    public function show($id) {
 +
 
 +
        //Si id tiene valor se hace la busqueda
 +
         if($id){
 +
            $this->obj = $this->ParteMaquina->find($id);
 +
        } else {
 +
            //enrutamiento porque no se coloco un ID
 +
            return Router::route_to('action: index');
 +
        }
 
     }
 
     }
 
      
 
      
 
     /**
 
     /**
     * Crea un Registro
+
     * Crea un Controlador para el menu
 +
    *
 
     */
 
     */
 
     public function create ()
 
     public function create ()
Línea 96: Línea 97:
 
                 * igual como esta el model de la vista, en este caso el model es "menus" y quedaria $this->menus
 
                 * igual como esta el model de la vista, en este caso el model es "menus" y quedaria $this->menus
 
                 */
 
                 */
            }else{
 
                Flash::success('Operación exitosa');
 
 
             }
 
             }
 
         }
 
         }
Línea 103: Línea 102:
  
 
     /**
 
     /**
     * Edita un Registro
+
     * Edita un registro
 
     */
 
     */
     public function edit($id = null)
+
     public function edit($id=null) {
    {
+
       
    $menu = new Menus();
+
         if ($this->has_post('parte_maquina')) {
         if($id != null){
+
             $obj = new ParteMaquina($this->post('parte_maquina'));
        //Aplicando la autocarga de objeto, para comenzar la edición
+
            //$obj->version=  $this->ciudad->version+1;
             $this->menus = $menu->find((int)$id);
+
             if ($obj->update()) {
    }
+
                 Flash::notice('Operación Exitosa');
        //se verifica si se ha enviado el formulario (submit)
+
                 Router::route_to('controller: parte_maquina','action: index','id: 1');
        if($this->has_post('menus')){
 
           
 
             if(!$menu->update($this->post('menus'))){
 
                 Flash::error('Falló Operación');
 
                 //se hacen persistente los datos en el formulario
 
                $this->menus = $this->post('menus');
 
 
             } else {
 
             } else {
                 Router::route_to('action: index');
+
                 Flash::error('No se Guardo!');
 +
                $this->render('edit');
 
             }
 
             }
 +
        }else {
 +
            $this->obj = $this->ParteMaquina->find($id);
 
         }
 
         }
 
     }
 
     }
  
    /**
+
     public function delete($id=0) {
    * Eliminar un menu
+
         $obj  = $this->ParteMaquina->find($id);
    *
+
 
    * @param int $id
+
         if($obj->delete()) {
    */
+
            Flash::notice('Operación Exitosa');
     public function del($id = null)
+
        }else{
    {
+
             Flash::error('No se Eliminó!');
         $menu = new Menus();
 
         if ($id) {
 
            if (!$menu->delete((int)$id)) {
 
                Flash::error('Falló Operación');
 
             }
 
 
         }
 
         }
        //enrutando al index para listar los menus
+
 
         Router::route_to('action: index');
+
         Router::route_to('controller: parte_maquina','action: index','id: 1');
 
     }
 
     }
 
}
 
}
 +
?>
 
</source>
 
</source>
  
== Vistas ==
+
== Las vistas ==
Agregamos las vistas...
 
 
 
'''''[apps]/views/menus/index.phtml'''''
 
<source lang="php" line>
 
<div class="content">
 
    <?php echo View::content(); ?>
 
    <h3>Menus</h3>
 
    <ul>
 
    <?php foreach ($listMenus->items as $item) : ?>
 
    <li>
 
        <?php echo link_to("menus/create",'Agregar'); ?>
 
        <?php echo link_to(array("menus/edit/$item->id/", 'Editar')) ?>
 
        <?php echo link_to(array("menus/del/$item->id/", 'Borrar')) ?><br/>
 
        <strong><?php echo $item->nombre ?> - <?php echo $item->titulo ?></strong>
 
    </li>
 
    <?php endforeach; ?>
 
    </ul>
 
   
 
    <?php if($listMenus->prev) echo Html::link("menus/index/$listMenus->prev/", '<< Anterior |'); ?>
 
    <?php if($listMenus->next) echo Html::link("menus/index/$listMenus->next/", '| Próximo >>'); ?>
 
</div>
 
</source>
 
  
 +
create.phtml
  
'''''[apps]/views/menus/create.phtml'''''
 
 
<source lang="php" line>
 
<source lang="php" line>
<?php View::content(); ?>
+
<h1>Crear parte de máquina</h1>
<?php echo form_tag('menus/create/') ?>
+
<?php View::content() ?>
<table>
 
    <tr>
 
        <td>Nombre</td>
 
        <td><?php echo text_field_tag(array('menus.nombre')) ?></td>
 
    </tr>
 
    <tr>
 
        <td>Titulo</td>
 
        <td><?php echo text_field_tag(array('menus.titulo')) ?></td>
 
    </tr> 
 
    <tr>
 
        <td>&nbsp;</td>
 
        <td><?php echo submit_tag('Agregar') ?></td>
 
    </tr>
 
</table>
 
<?php echo end_form_tag() ?>
 
</source>
 
  
 +
<?php echo form_tag("parte_maquina/create")?>
  
'''''[apps]/views/menus/edit.phtml'''''
+
<label for="parte_maquina_nombre">Nombre:</label>
<source lang="php" line>
+
          
<?php View::content(); ?>
+
<?php echo textupper_field_tag('parte_maquina.nombre') ?>
<?php echo form_tag('menus/edit/') ?>
+
          
<table>
+
<?php echo submit_tag('Guardar') ?>
    <tr>
+
<?php echo end_form_tag(); ?>
         <td>Nombre</td>
 
        <td><?php echo text_field_tag(array('menus.nombre')) ?></td>
 
    </tr>
 
    <tr>
 
        <td>Titulo</td>
 
        <td><?php echo text_field_tag(array('menus.titulo')) ?></td>
 
    </tr> 
 
    <tr>
 
         <td>&nbsp;</td>
 
        <?php echo hidden_field_tag(array('menus.id')) ?>
 
        <td><?php echo submit_tag('Actualizar') ?></td>
 
    </tr>
 
</table>
 
<?php echo end_form_tag() ?>
 
 
</source>
 
</source>
  
== Probando el CRUD ==
 
Ahora solo resta probar todo el código que hemos generado, en este punto es importante conocer el comportamiento de las [[Hola_Mundo_KumbiaPHP_Framework#KumbiaPHP_URLS|URL's en KumbiaPHP]].
 
 
* '''index''' es la acción para listar http://localhost/menus/index/
 
  NOTA: index/ se puede pasar de forma implícita o no KumbiaPHP en caso que no se le pase una acción
 
buscara por defecto un index, es decir si colocamos
 
  http://localhost/menus/
 
* '''create''' crea un menu en la Base de Datos http://localhost/menus/create/
 
* Las acciones '''del''' y '''edit''' a ambas se debe entrar desde el index, ya que reciben el parámetros a editar o borrar según el caso.
 
 
[[Categoría:Tutoriales KumbiaPHP]]
 
[[Categoría:Tutoriales KumbiaPHP]]
 
== Descarga ==
 
Descarga: [http://dl.dropbox.com/u/2807704/kumbiaPHP/v1_b1/app_crud.zip app_crud] para el '''core''' de Spirit v1.0 '''beta1'''.
 
 
Este ejemplo de descarga esta apuntado a la base de datos '''test''', usuario '''root''' y clave '''123'''.
 

Ten en cuenta que todas las contribuciones a KumbiaPHP Framework Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Proyecto:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)

Plantilla usada en esta página: