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 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'); 
  
 
     /**
 
     /**
Línea 65: Línea 51:
 
     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');
 +
        }
 
     }
 
     }
 
      
 
      
Línea 96: Línea 96:
 
                 * 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 105: Línea 103:
 
     * 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);
 
         }
 
         }
 
     }
 
     }
  
 
     /**
 
     /**
     * Eliminar un menu
+
     * Elimina un Registro
    *
 
    * @param int $id
 
 
     */
 
     */
     public function del($id = null)
+
     public function delete($id=0) {
    {
+
         $obj  = $this->ParteMaquina->find($id);
         $menu = new Menus();
+
 
         if ($id) {
+
         if($obj->delete()) {
            if (!$menu->delete((int)$id)) {
+
            Flash::notice('Operación Exitosa');
                Flash::error('Falló Operación');
+
        }else{
             }
+
             Flash::error('No se Eliminó!');
 
         }
 
         }
        //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: