TRADUCTOR

lunes, 24 de junio de 2013

CRUD en KumbiaPHP Framework

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 (StandardForm) y un manejo correcto del MVC en KumbiaPHP. 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
  • Configurar el archivo databases.ini, con los datos y motor de Base de Datos a utilizar.
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.
CREATE TABLE menus
(
 id           int            unique not null auto_increment,
 nombre       varchar(100),
 titulo       varchar(100)   not null,
 primary key(id)
)
  • Vamos ahora a definir el modelo el cual nos permite interactuar con la BD.
  • [app]/models/menus.php:
  1. <?php
  2. class Menus extends ActiveRecord
  3. {
  4.     /**
  5.      * Retorna los menu para ser paginados
  6.      *
  7.      */
  8.     public function getMenus($page, $ppage=20)
  9.     {
  10.         return $this->paginate("page: $page", "per_page: $ppage", 'order: id desc');
  11.     }
  12. }
    
    
    CONTROLLER
    
    
    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.
    
    
    [app]/controllers/menus_controller.php:
    
    
    <?php
    /**
     * Carga del modelo Menus...
     */
    Load::models('menus');
     
    class MenusController extends AppController {
        /**
         * Obtiene una lista para paginar los menus
         */
        public function index($page=1) 
        {
            $menu = new Menus();
            $this->listMenus = $menu->getMenus($page);
        }
     
        /**
         * Crea un Registro
         */
        public function create ()
        {
            /**
             * Se verifica si el usuario envio el form (submit) y si ademas 
             * dentro del array POST existe uno llamado "menus"
             * el cual aplica la autocarga de objeto para guardar los 
             * datos enviado por POST utilizando autocarga de objeto
             */
            if(Input::hasPost('menus')){
                /**
                 * se le pasa al modelo por constructor los datos del form y ActiveRecord recoge esos datos
                 * y los asocia al campo correspondiente siempre y cuando se utilice la convención
                 * model.campo
                 */
                $menu = new Menus(Input::post('menus'));
                //En caso que falle la operación de guardar
                if($menu->save()){
                    Flash::valid('Operación exitosa');
                    //Eliminamos el POST, si no queremos que se vean en el form
                    Input::delete();
                    return;               
                }else{
                    Flash::error('Falló Operación');
                }
            }
        }
     
        /**
         * Edita un Registro
         *
         * @param int $id (requerido)
         */
        public function edit($id)
        {
            $menu = new Menus();
     
            //se verifica si se ha enviado el formulario (submit)
            if(Input::hasPost('menus')){
     
                if($menu->update(Input::post('menus'))){
                     Flash::valid('Operación exitosa');
                    //enrutando por defecto al index del controller
                    return Router::redirect();
                } else {
                    Flash::error('Falló Operación');
                }
            } else {
                //Aplicando la autocarga de objeto, para comenzar la edición
                $this->menus = $menu->find_by_id((int)$id);
            }
        }
     
        /**
         * Eliminar un menu
         * 
         * @param int $id (requerido)
         */
        public function del($id)
        {
            $menu = new Menus();
            if ($menu->delete((int)$id)) {
                    Flash::valid('Operación exitosa');
            }else{
                    Flash::error('Falló Operación'); 
            }
     
            //enrutando por defecto al index del controller
            return Router::redirect();
        }
    }
    
    
    VISTAS
    
    
    Agregamos las vistas...
    [apps]/views/menus/index.phtml
    <div class="content">
        <?php echo View::content(); ?>
        <h3>Menus</h3>
        <ul>
        <?php foreach ($listMenus->items as $item) : ?>
        <li>
            <?php echo Html::linkAction("edit/$item->id/", 'Editar') ?>
            <?php echo Html::linkAction("del/$item->id/", 'Borrar') ?>
            <strong><?php echo $item->nombre ?> - <?php echo $item->titulo ?></strong>
        </li>
        <?php endforeach; ?>
        </ul>
     
         // ejemplo manual de paginador, hay partial listos en formato digg, clasic,....
        <?php if($listMenus->prev) echo Html::linkAction("index/$listMenus->prev/", '<< Anterior |'); ?>
        <?php if($listMenus->next) echo Html::linkAction("index/$listMenus->next/", 'Próximo >>'); ?>
    </div>
    
    
    [apps]/views/menus/create.phtml
    
    
    <?php View::content(); ?>
    <h3>Crear menu<h3>
     
    <?php echo Form::open(); // por defecto llama a la misma url ?>
     
            <label>Nombre
            <?php echo Form::text('menus.nombre') ?></label>
     
            <label>Título
            <?php echo Form::text('menus.titulo') ?></label>
     
            <?php echo Form::submit('Agregar') ?>
     
    <?php echo Form::close() ?>
    
    
    [apps]/views/menus/edit.phtml
    
    
    
    
    <?php View::content(); ?>
    <h3>Editar menu<h3>
     
    <?php echo Form::open(); // por defecto llama a la misma url ?>
     
            <label>Nombre
            <?php echo Form::text('menus.nombre') ?></label>
     
            <label>Título
            <?php echo Form::text('menus.titulo') ?></label>
     
            <?php echo Form::hidden('menus.id') ?>
            <?php echo Form::submit('Actualizar') ?>
     
    <?php echo Form::close() ?>
    
    
    
    

Qué es KumbiaPHP ?

KumbiaPHP es un framework para aplicaciones web libre escrito en PHP5. Basado en las prácticas de desarrollo web como DRY y el Principio KISS para software comercial y educativo. Kumbiaphp fomenta la velocidad y eficiencia en la creación y mantenimiento de aplicaciones web, reemplazando tareas de codificación repetitivas por poder, control y placer.


Sus principales características son: 

  • Sistema de Plantillas sencillo. 
  • Administración de Cache. 
  • Scaffolding Avanzado. 
  • Modelo de Objetos y Separación MVC. 
  • Soporte para AJAX. 
  • Generación de Formularios. 
  • Componentes Gráficos. 
  • Seguridad.
Propiedad Descripción

$fields: Listado de Campos de la tabla que han sido mapeados.

$count: Conteo del último Resultado de un Select.

$primary_key: Listado de columnas que conforman la llave primaria.

$non_primary: Listado de columnas que no son llave primaria.

$not_null: Listado de campos que son not_null.

$attributes_names: Nombres de todos los campos que han sido mapeados.

$is_view: Soporte para las Vista.