Edición de «Beta2 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 4: Línea 4:
 
}}
 
}}
 
{{cleanupbox
 
{{cleanupbox
|texto ='''Este ejemplo es funcional para la [[KumbiaPHP_Framework_Versión_1.0_Beta2| Versión Beta2 en desarrollo]]''' es un boceto de CRUD <br />
+
|texto ='''Este ejemplo es funcional para la [[KumbiaPHP_Framework_Versión_1.0_Beta2| Versión Beta2]]'''<br />
 
}}
 
}}
== Introducción ==
+
== 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.
 
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.
  
 
'''El CRUD de la beta1 sigue funcionando igual en la beta2, pero queda desaconsejado.'''
 
'''El CRUD de la beta1 sigue funcionando igual en la beta2, pero queda desaconsejado.'''
En la versión 1.0 se podrá usar de las 2 maneras. Y la 1.2 que saldrá junto a la 1.0 sólo se usará lo nuevo y se eliminará lo desaconsejado.
 
  
 
== Configurando database.ini ==
 
== Configurando database.ini ==
Línea 41: Línea 40:
 
     public function getMenus($page, $ppage=20)
 
     public function getMenus($page, $ppage=20)
 
     {
 
     {
         return $this->paginate("page: $page", "per_page: $ppage", 'order: id desc');
+
         return $this->paginate("page: $page", "per_page: $ppage");
 
     }
 
     }
 
}
 
}
Línea 50: Línea 49:
 
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]]
  
 
'''''[app]/controllers/menus_controller.php:'''''
 
'''''[app]/controllers/menus_controller.php:'''''
Línea 55: Línea 55:
 
<source lang="php">
 
<source lang="php">
 
<?php
 
<?php
/**
+
class MenusController extends ApplicationController {
* Carga del modelo Menus...
+
    //Carga del modelo Menus, porque tenemos la autocarga de modelos desactivada (off)
*/
+
    public $models = array('menus');  
Load::models('menus');// No es necesario en la v1, los modelos se autocargan
 
  
class MenusController extends AppController {
 
 
     /**
 
     /**
 
     * Obtiene una lista para paginar los menus
 
     * Obtiene una lista para paginar los menus
Línea 66: Línea 64:
 
     public function index($page=1)  
 
     public function index($page=1)  
 
     {
 
     {
        $menu = new Menus();
+
         $this->listMenus = $this->Menus->getMenus($page);
         $this->listMenus = $menu->getMenus($page);
 
 
     }
 
     }
 
      
 
      
Línea 81: Línea 78:
 
         * datos enviado por POST utilizando autocarga de objeto
 
         * datos enviado por POST utilizando autocarga de objeto
 
         */
 
         */
         if(Input::hasPost('menus')){
+
         if($this->has_post('menus')){
 
             /**
 
             /**
 
             * se le pasa al modelo por constructor los datos del form y ActiveRecord recoge esos datos
 
             * se le pasa al modelo por constructor los datos del form y ActiveRecord recoge esos datos
Línea 87: Línea 84:
 
             * model.campo
 
             * model.campo
 
             */
 
             */
             $menu = new Menus(Input::post('menus'));
+
             $menu = new Menus($this->post('menus'));
 
             //En caso que falle la operación de guardar
 
             //En caso que falle la operación de guardar
             if($menu->create()){
+
             if(!$menu->save()){
                 Flash::valid('Operación exitosa');
+
                 Flash::error('Falló Operación');
                 //Eliminamos el POST, si no queremos que se vean en el form
+
                 //se hacen persistente los datos en el formulario
                 Input::delete();
+
                 $this->menus = $this->post('menus');
                 return;             
+
                 /**
 +
                * NOTA: para que la autocarga aplique de forma correcta, es necesario que llame a la variable de instancia
 +
                * igual como esta el model de la vista, en este caso el model es "menus" y quedaria $this->menus
 +
                */
 
             }else{
 
             }else{
                 Flash::error('Falló Operación');
+
                 Flash::succes('Operación exitosa');
 
             }
 
             }
 
         }
 
         }
Línea 102: Línea 102:
 
     /**
 
     /**
 
     * Edita un Registro
 
     * Edita un Registro
    *
 
    * @param int $id (requerido)
 
 
     */
 
     */
     public function edit($id)
+
     public function edit($id = null)
 
     {
 
     {
        $menu = new Menus();
+
    if($id != null){
 
+
        //Aplicando la autocarga de objeto, para comenzar la edición
 +
            $this->menus = $this->Menus->find($id);
 +
    }
 
         //se verifica si se ha enviado el formulario (submit)
 
         //se verifica si se ha enviado el formulario (submit)
         if(Input::hasPost('menus')){
+
         if($this->has_post('menus')){
 
              
 
              
             if($menu->update(Input::post('menus'))){
+
             if(!$this->Menus->update($this->post('menus'))){
                Flash::valid('Operación exitosa');
+
                Flash::error('Falló Operación');
                 //enrutando por defecto al index del controller
+
                 //se hacen persistente los datos en el formulario
                 return Redirect::to();
+
                 $this->menus = $this->post('menus');
 
             } else {
 
             } else {
                 Flash::error('Falló Operación');
+
                 Router::route_to('action: index');
 
             }
 
             }
        } else {
 
            //Aplicando la autocarga de objeto, para comenzar la edición
 
            $this->menus = $menu->find_by_id((int)$id);
 
 
         }
 
         }
 
     }
 
     }
Línea 128: Línea 125:
 
     * Eliminar un menu
 
     * Eliminar un menu
 
     *  
 
     *  
     * @param int $id (requerido)
+
     * @param int $id
 
     */
 
     */
     public function del($id)
+
     public function del($id = null)
 
     {
 
     {
         $menu = new Menus();
+
         if ($id) {
        if ($menu->delete((int)$id)) {
+
            if (!$this->Menus->delete($id)) {
                 Flash::valid('Operación exitosa');
+
                 Flash::error('Falló Operación');
        }else{
+
            }
                Flash::error('Falló Operación');
 
 
         }
 
         }
 
+
         //enrutando al index para listar los menus
         //enrutando por defecto al index del controller
+
         Router::route_to('action: index');
         return Redirect::to();
 
 
     }
 
     }
 
}
 
}
 +
?>
 
</source>
 
</source>
  
Línea 151: Línea 147:
 
<source lang=php>
 
<source lang=php>
 
<div class="content">
 
<div class="content">
     <?php View::content(); ?>
+
     <?php echo View::content(); ?>
 
     <h3>Menus</h3>
 
     <h3>Menus</h3>
 
     <ul>
 
     <ul>
 
     <?php foreach ($listMenus->items as $item) : ?>
 
     <?php foreach ($listMenus->items as $item) : ?>
 
     <li>
 
     <li>
         <?php echo Html::linkAction("edit/$item->id/", 'Editar') ?>
+
         <?php echo link_to(array("menus/edit/$item->id/", 'Editar')) ?>
         <?php echo Html::linkAction("del/$item->id/", 'Borrar') ?>
+
         <?php echo link_to(array("menus/del/$item->id/", 'Borrar')) ?>
 
         <strong><?php echo $item->nombre ?> - <?php echo $item->titulo ?></strong>
 
         <strong><?php echo $item->nombre ?> - <?php echo $item->titulo ?></strong>
 
     </li>
 
     </li>
Línea 163: Línea 159:
 
     </ul>
 
     </ul>
 
      
 
      
    <!-- ejemplo manual de paginador, hay partial listos en formato digg, clasic,.... -->
+
     <?php if($listMenus->prev) echo link_to(array("menus/index/$listMenus->prev/", '<< Anterior |')); ?>
     <?php if($listMenus->prev) echo Html::linkAction("index/$listMenus->prev/", '<< Anterior |'); ?>
+
     <?php if($listMenus->next) echo link_to(array("menus/index/$listMenus->next/", 'Próximo >>')); ?>
     <?php if($listMenus->next) echo Html::linkAction("index/$listMenus->next/", 'Próximo >>'); ?>
 
 
</div>
 
</div>
 
</source>
 
</source>
Línea 172: Línea 167:
 
'''''[apps]/views/menus/create.phtml'''''
 
'''''[apps]/views/menus/create.phtml'''''
 
<source lang=php>
 
<source lang=php>
<div class="content">
 
 
<?php View::content(); ?>
 
<?php View::content(); ?>
<h3>Crear menu<h3>
+
<?php echo form_tag('menus/create/') ?>
 
+
<table>
<?php echo Form::open(); // por defecto llama a la misma url ?>
+
    <tr>
       
+
         <td>Nombre</td>
         <label>Nombre
+
         <td><?php echo text_field_tag(array('menus.nombre')) ?></td>
         <?php echo Form::text('menus.nombre') ?></label>
+
    </tr>
       
+
    <tr>
         <label>Título
+
         <td>Titulo</td>
         <?php echo Form::text('menus.titulo') ?></label>
+
         <td><?php echo text_field_tag(array('menus.titulo')) ?></td>
 
+
    </tr> 
         <?php echo Form::submit('Agregar') ?>
+
    <tr>
 
+
        <td>&nbsp;</td>
<?php echo Form::close() ?>
+
         <td><?php echo submit_tag('Agregar') ?></td>
</div>
+
    </tr>
 +
</table>
 +
<?php echo end_form_tag() ?>
 
</source>
 
</source>
  
Línea 193: Línea 189:
 
'''''[apps]/views/menus/edit.phtml'''''
 
'''''[apps]/views/menus/edit.phtml'''''
 
<source lang=php>
 
<source lang=php>
<div class="content">
 
 
<?php View::content(); ?>
 
<?php View::content(); ?>
<h3>Editar menu<h3>
+
<?php echo form_tag('menus/edit/') ?>
 
+
<table>
<?php echo Form::open(); // por defecto llama a la misma url ?>
+
    <tr>
 
+
         <td>Nombre</td>
         <label>Nombre
+
         <td><?php echo text_field_tag(array('menus.nombre')) ?></td>
         <?php echo Form::text('menus.nombre') ?></label>
+
    </tr>
 
+
    <tr>
         <label>Título
+
         <td>Titulo</td>
         <?php echo Form::text('menus.titulo') ?></label>
+
         <td><?php echo text_field_tag(array('menus.titulo')) ?></td>
 
+
    </tr> 
         <?php echo Form::hidden('menus.id') ?>
+
    <tr>
         <?php echo Form::submit('Actualizar') ?>
+
        <td>&nbsp;</td>
 
+
         <?php echo hidden_field_tag(array('menus.id')) ?>
<?php echo Form::close() ?>
+
         <td><?php echo submit_tag('Actualizar') ?></td>
</div>
+
    </tr>
 +
</table>
 +
<?php echo end_form_tag() ?>
 
</source>
 
</source>
  
Línea 216: Línea 213:
  
 
* '''index''' es la acción para listar http://localhost/menus/index/  
 
* '''index''' es la acción para listar http://localhost/menus/index/  
   NOTA: index/ se puede pasar de forma implícita o no  
+
   NOTA: index/ se puede pasar de forma implícita o no KumbiaPHP en caso que no se le pase una acción  
KumbiaPHP en caso que no se le pase una acción, buscara por defecto un index. Es decir si colocamos
+
buscara por defecto un index, es decir si colocamos
 
   http://localhost/menus/
 
   http://localhost/menus/
 
* '''create''' crea un menu en la Base de Datos http://localhost/menus/create/
 
* '''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.
 
* 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]]
[[Categoría:Tutoriales KumbiaPHP Beta2]]
 

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: