https://wiki.kumbiaphp.com/api.php?action=feedcontributions&user=190.9.89.102&feedformat=atomKumbiaPHP Framework Wiki - Contribuciones del usuario [es]2024-03-29T09:48:05ZContribuciones del usuarioMediaWiki 1.34.1https://wiki.kumbiaphp.com/index.php?title=Como_hacer_un_CRUD_en_KumbiaPHP_Framework&diff=2274Como hacer un CRUD en KumbiaPHP Framework2010-02-11T19:06:01Z<p>190.9.89.102: /* Controller */</p>
<hr />
<div>{{cleanupbox<br />
|image=[[Archivo:Information_icon4.png|45px]]<br />
|texto ='''Este Artículo cumple con todos los requererimientos de los Kumbieros.'''<br /><br />
}}<br />
== Texto de titular ==<br />
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.<br />
<br />
== Configurando database.ini ==<br />
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.<br />
<br />
== Modelo ==<br />
'''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]])<br />
<br />
<pre><br />
CREATE TABLE menus<br />
(<br />
id int unique not null auto_increment,<br />
nombre varchar(100),<br />
titulo varchar(100) not null,<br />
primary key(id)<br />
)<br />
</pre><br />
<br />
Vamos ahora a definir el modelo el cual nos permite interactuar con la BD.<br />
<br />
'''''[app]/models/menus.php:'''''<br />
<source lang="php" line><br />
<?php<br />
class Menus extends ActiveRecord<br />
{<br />
/**<br />
* Retorna los menu para ser paginados<br />
*<br />
*/<br />
public function getMenus($page, $ppage=20)<br />
{<br />
return $this->paginate("page: $page", "per_page: $ppage");<br />
}<br />
}<br />
</source><br />
<br />
== Controller ==<br />
<br />
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.<br />
<br />
En esta parte es importante que se haya visto el [[AutoCarga_de_Objetos_KumbiaPHP | Tutorial de Auto Carga de Objetos]]<br />
<br />
'''''[app]/controllers/menus_controller.php:'''''<br />
<br />
<source lang="php"><br />
<?php<br />
class MenusController extends ApplicationController {<br />
//Carga del modelo Menus, porque tenemos la autocarga de modelos desactivada (off)<br />
public $models = array('menus'); <br />
<br />
/**<br />
* Obtiene una lista para paginar los menus<br />
*/<br />
public function index($page=1) <br />
{<br />
$this->listMenus = $this->Menus->getMenus($page);<br />
}<br />
<br />
/**<br />
* Crea un Registro<br />
*/<br />
public function create ()<br />
{<br />
/**<br />
* Se verifica si el usuario envio el form (submit) y si ademas <br />
* dentro del array POST existe uno llamado "menus"<br />
* el cual aplica la autocarga de objeto para guardar los <br />
* datos enviado por POST utilizando autocarga de objeto<br />
*/<br />
if($this->has_post('menus')){<br />
/**<br />
* se le pasa al modelo por constructor los datos del form y ActiveRecord recoge esos datos<br />
* y los asocia al campo correspondiente siempre y cuando se utilice la convención<br />
* model.campo<br />
*/<br />
$menu = new Menus($this->post('menus'));<br />
//En caso que falle la operación de guardar<br />
if(!$menu->save()){<br />
Flash::error('Falló Operación');<br />
//se hacen persistente los datos en el formulario<br />
$this->menus = $this->post('menus');<br />
/**<br />
* NOTA: para que la autocarga aplique de forma correcta, es necesario que llame a la variable de instancia<br />
* igual como esta el model de la vista, en este caso el model es "menus" y quedaria $this->menus<br />
*/<br />
}else{<br />
Flash::succes('Operación exitosa');<br />
}<br />
}<br />
}<br />
<br />
/**<br />
* Edita un Registro<br />
*/<br />
public function edit($id = null)<br />
{<br />
if($id != null){<br />
//Aplicando la autocarga de objeto, para comenzar la edición<br />
$this->menus = $this->Menus->find($id);<br />
}<br />
//se verifica si se ha enviado el formulario (submit)<br />
if($this->has_post('menus')){<br />
<br />
if(!$this->Menus->update($this->post('menus'))){<br />
Flash::error('Falló Operación');<br />
//se hacen persistente los datos en el formulario<br />
$this->menus = $this->post('menus');<br />
} else {<br />
Router::route_to('action: index');<br />
}<br />
}<br />
}<br />
<br />
/**<br />
* Eliminar un menu<br />
* <br />
* @param int $id<br />
*/<br />
public function del($id = null)<br />
{<br />
if ($id) {<br />
if (!$this->Menus->delete($id)) {<br />
Flash::error('Falló Operación');<br />
}<br />
}<br />
//enrutando al index para listar los menus<br />
Router::route_to('action: index');<br />
}<br />
}<br />
?><br />
</source><br />
<br />
== Vistas ==<br />
Agregamos las vistas...<br />
<br />
'''''[apps]/views/menus/index.phtml'''''<br />
<source lang=php><br />
<div class="content"><br />
<?php echo View::content(); ?><br />
<h3>Menus</h3><br />
<ul><br />
<?php foreach ($listMenus->items as $item) : ?><br />
<li><br />
<?php echo link_to(array("menus/edit/$item->id/", 'Editar')) ?><br />
<?php echo link_to(array("menus/del/$item->id/", 'Borrar')) ?><br />
<strong><?php echo $item->nombre ?> - <?php echo $item->titulo ?></strong><br />
</li><br />
<?php endforeach; ?><br />
</ul><br />
<br />
<?php if($listMenus->prev) echo link_to(array("menus/index/$listMenus->prev/", '<< Anterior |')); ?><br />
<?php if($listMenus->next) echo link_to(array("menus/index/$listMenus->next/", 'Próximo >>')); ?><br />
</div><br />
</source><br />
<br />
<br />
'''''[apps]/views/menus/create.phtml'''''<br />
<source lang=php><br />
<?php View::content(); ?><br />
<?php echo form_tag('menus/create/') ?><br />
<table><br />
<tr><br />
<td>Nombre</td><br />
<td><?php echo text_field_tag(array('menus.nombre')) ?></td><br />
</tr><br />
<tr><br />
<td>Titulo</td><br />
<td><?php echo text_field_tag(array('menus.titulo')) ?></td><br />
</tr> <br />
<tr><br />
<td>&nbsp;</td><br />
<td><?php echo submit_tag('Agregar') ?></td><br />
</tr><br />
</table><br />
<?php echo end_form_tag() ?><br />
</source><br />
<br />
<br />
'''''[apps]/views/menus/edit.phtml'''''<br />
<source lang=php><br />
<?php View::content(); ?><br />
<?php echo form_tag('menus/edit/') ?><br />
<table><br />
<tr><br />
<td>Nombre</td><br />
<td><?php echo text_field_tag(array('menus.nombre')) ?></td><br />
</tr><br />
<tr><br />
<td>Titulo</td><br />
<td><?php echo text_field_tag(array('menus.titulo')) ?></td><br />
</tr> <br />
<tr><br />
<td>&nbsp;</td><br />
<?php echo hidden_field_tag(array('menus.id')) ?><br />
<td><?php echo submit_tag('Actualizar') ?></td><br />
</tr><br />
</table><br />
<?php echo end_form_tag() ?><br />
</source><br />
<br />
== Probando el CRUD ==<br />
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]].<br />
<br />
* '''index''' es la acción para listar http://localhost/menus/index/ <br />
NOTA: index/ se puede pasar de forma implícita o no KumbiaPHP en caso que no se le pase una acción <br />
buscara por defecto un index, es decir si colocamos<br />
http://localhost/menus/<br />
* '''create''' crea un menu en la Base de Datos http://localhost/menus/create/<br />
* 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.<br />
[[Categoría:Tutoriales KumbiaPHP]]</div>190.9.89.102