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. | + | |texto ='''Este ejemplo es funcional para la [[KumbiaPHP_Framework_Versión_1.0_Spirit | Versión Beta2]]'''<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. | 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.''' | ||
− | |||
== 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" | + | 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, porque tenemos la autocarga de modelos desactivada (off) | |
− | + | public $models = array('menus'); | |
− | |||
− | |||
/** | /** | ||
* 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) | ||
{ | { | ||
− | + | $this->listMenus = $this->Menus->getMenus($page); | |
− | $this->listMenus = $ | ||
} | } | ||
Línea 81: | Línea 78: | ||
* datos enviado por POST utilizando autocarga de objeto | * datos enviado por POST utilizando autocarga de objeto | ||
*/ | */ | ||
− | if( | + | 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( | + | $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-> | + | if(!$menu->save()){ |
− | Flash:: | + | Flash::error('Falló Operación'); |
− | // | + | //se hacen persistente los datos en el formulario |
− | + | $this->menus = $this->post('menus'); | |
− | + | /** | |
+ | * 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:: | + | Flash::succes('Operación exitosa'); |
} | } | ||
} | } | ||
Línea 102: | Línea 102: | ||
/** | /** | ||
* Edita un Registro | * Edita un Registro | ||
− | |||
− | |||
*/ | */ | ||
− | public function edit($id) | + | public function edit($id = null) |
{ | { | ||
− | + | 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( | + | if($this->has_post('menus')){ |
− | if($ | + | if(!$this->Menus->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'); | |
} | } | ||
− | |||
− | |||
− | |||
} | } | ||
} | } | ||
Línea 128: | Línea 125: | ||
* Eliminar un menu | * Eliminar un menu | ||
* | * | ||
− | * @param int $id | + | * @param int $id |
*/ | */ | ||
− | public function del($id) | + | public function del($id = null) |
{ | { | ||
− | $ | + | if ($id) { |
− | + | if (!$this->Menus->delete($id)) { | |
− | Flash:: | + | Flash::error('Falló Operación'); |
− | + | } | |
− | |||
} | } | ||
− | + | //enrutando al index para listar los menus | |
− | //enrutando | + | Router::route_to('action: index'); |
− | |||
} | } | ||
} | } | ||
+ | ?> | ||
</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 | + | <?php echo link_to(array("menus/edit/$item->id/", 'Editar')) ?> |
− | <?php echo | + | <?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> | ||
− | + | <?php if($listMenus->prev) echo link_to(array("menus/index/$listMenus->prev/", '<< Anterior |')); ?> | |
− | <?php if($listMenus->prev) echo | + | <?php if($listMenus->next) echo link_to(array("menus/index/$listMenus->next/", 'Próximo >>')); ?> |
− | <?php if($listMenus->next) echo | ||
</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> | ||
− | |||
<?php View::content(); ?> | <?php View::content(); ?> | ||
− | + | <?php echo form_tag('menus/create/') ?> | |
− | + | <table> | |
− | <?php echo | + | <tr> |
− | + | <td>Nombre</td> | |
− | < | + | <td><?php echo text_field_tag(array('menus.nombre')) ?></td> |
− | <?php echo | + | </tr> |
− | + | <tr> | |
− | < | + | <td>Titulo</td> |
− | <?php echo | + | <td><?php echo text_field_tag(array('menus.titulo')) ?></td> |
− | + | </tr> | |
− | <?php echo | + | <tr> |
− | + | <td> </td> | |
− | <?php echo | + | <td><?php echo submit_tag('Agregar') ?></td> |
− | + | </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> | ||
− | |||
<?php View::content(); ?> | <?php View::content(); ?> | ||
− | + | <?php echo form_tag('menus/edit/') ?> | |
− | + | <table> | |
− | <?php echo | + | <tr> |
− | + | <td>Nombre</td> | |
− | < | + | <td><?php echo text_field_tag(array('menus.nombre')) ?></td> |
− | <?php echo | + | </tr> |
− | + | <tr> | |
− | < | + | <td>Titulo</td> |
− | <?php echo | + | <td><?php echo text_field_tag(array('menus.titulo')) ?></td> |
− | + | </tr> | |
− | <?php echo | + | <tr> |
− | <?php echo | + | <td> </td> |
− | + | <?php echo hidden_field_tag(array('menus.id')) ?> | |
− | <?php echo | + | <td><?php echo submit_tag('Actualizar') ?></td> |
− | + | </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 |
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]] | ||
− |