Diferencia entre revisiones de «Beta2 CRUD en KumbiaPHP Framework»
(→Controller) |
(→Vistas) |
||
Línea 176: | Línea 176: | ||
<?php echo Form::open(); // por defecto llama a la misma url ?> | <?php echo Form::open(); // por defecto llama a la misma url ?> | ||
− | <label | + | <label>Nombre |
− | <?php echo Form::text('menus.nombre') ?> | + | <?php echo Form::text('menus.nombre') ?></label> |
− | <label | + | <label>Título |
− | <?php echo Form::text('menus.titulo') ?> | + | <?php echo Form::text('menus.titulo') ?></label> |
<?php echo Form::submit('Agregar') ?> | <?php echo Form::submit('Agregar') ?> | ||
Línea 195: | Línea 195: | ||
<?php echo Form::open(); // por defecto llama a la misma url ?> | <?php echo Form::open(); // por defecto llama a la misma url ?> | ||
− | <label | + | <label>Nombre |
− | <?php echo Form::text('menus.nombre') ?> | + | <?php echo Form::text('menus.nombre') ?></label> |
− | <label | + | <label>Título |
− | <?php echo Form::text('menus.titulo') ?> | + | <?php echo Form::text('menus.titulo') ?></label> |
<?php echo Form::hidden('menus.id') ?> | <?php echo Form::hidden('menus.id') ?> |
Revisión de 11:37 20 abr 2010
![]() |
Este Artículo cumple con todos los requererimientos de los Kumbieros. |
Este ejemplo es funcional para la Versión Beta2 en desarrollo es un boceto de CRUD |
Contenido
Introducción
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:
<?php
class Menus extends ActiveRecord
{
/**
* Retorna los menu para ser paginados
*
*/
public function getMenus($page, $ppage=20)
{
return $this->paginate("page: $page", "per_page: $ppage");
}
}
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 ApplicationController { /** * 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::error('Falló Operación'); }else{ Flash::valid('Operación exitosa'); //Eliminamos el POST, si no queremos que se vean en el form Input::delete(); } } } /** * Edita un Registro */ public function edit($id = NULL) { $menu = new Menus(); if($id != NULL){ //Aplicando la autocarga de objeto, para comenzar la edición $this->menus = $menu->find($id); } //se verifica si se ha enviado el formulario (submit) if(Input::hasPost('menus')){ if(!$menu->update(Input::post('menus'))){ Flash::error('Falló Operación'); } else { Flash::valid('Operación exitosa'); //enrutando por defecto al index del controller return Router::redirect(); } } } /** * Eliminar un menu * * @param int $id */ public function del($id = NULL) { if ($id) { $menu = new Menus(); if (!$menu->delete($id)) { Flash::error('Falló Operación'); }else{ Flash::valid('Operación exitosa'); } } //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() ?>
Probando el CRUD
Ahora solo resta probar todo el código que hemos generado, en este punto es importante conocer el comportamiento de las 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.