Revisión actual |
Tu texto |
Línea 1: |
Línea 1: |
− | {{cleanupbox
| + | '''Modelo:''' |
− | |image=[[Archivo:Information_icon4.png|45px]]
| |
− | |texto ='''Este Artículo cumple con todos los requererimientos de los Kumbieros.'''<br />
| |
− | }}
| |
− | {{cleanupbox
| |
− | |texto ='''Este ejemplo es funcional para la [[KumbiaPHP_Framework_Versión_1.0_Spirit | Versión Beta1]]'''<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.
| |
− | | |
− | == Configurando database.ini ==
| |
− | 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.
| |
− | | |
− | == 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 (la misma del ejemplo de [[AutoCarga_de_Objetos_KumbiaPHP | Auto Carga de Objetos]]) | |
− | | |
− | <pre>
| |
− | CREATE TABLE menus
| |
− | (
| |
− | id int unique not null auto_increment,
| |
− | nombre varchar(100),
| |
− | titulo varchar(100) not null,
| |
− | primary key(id)
| |
− | )
| |
− | </pre>
| |
− | | |
− | Vamos ahora a definir el modelo el cual nos permite interactuar con la BD.
| |
− | | |
− | '''''[app]/models/menus.php:'''''
| |
| <source lang="php" line> | | <source lang="php" line> |
| <?php | | <?php |
− | class Menus extends ActiveRecord | + | class TipoParteMaquina extends ActiveRecord{ |
− | {
| + | |
− | /**
| |
− | * Retorna los menu para ser paginados
| |
− | *
| |
− | */
| |
− | public function getMenus($page, $ppage=20)
| |
− | {
| |
− | return $this->paginate("page: $page", "per_page: $ppage");
| |
− | } | |
| } | | } |
| + | ?> |
| </source> | | </source> |
| | | |
− | == Controller ==
| + | '''Controlador:''' |
− | | |
− | 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:''''' | |
| | | |
| <source lang="php" line> | | <source lang="php" line> |
| <?php | | <?php |
− | /**
| + | class TipoParteMaquinaController extends ApplicationController { |
− | * Carga del modelo Menus...
| + | |
− | */
| + | public $models = array('tipo_parte_maquina'); |
− | Load::models('menus');
| |
| | | |
− | class MenusController extends ApplicationController {
| + | public function index($page=1) { |
| + | $cons=""; |
| + | if(isset ($this->parameters[1])) { |
| + | $cons= "order: ".$this->parameters[1]." asc"; |
| + | $this->orden="/".$this->parameters[1]; |
| + | }else { |
| + | $this->orden=""; |
| + | } |
| + | $this->count = $this->TipoParteMaquina->count(); |
| + | $this->page = $this->TipoParteMaquina->paginate('per_page: 20', "page: $page"); |
| + | } |
| | | |
− | /**
| + | public function show($id) { |
− | * Obtiene una lista para paginar los menus
| + | $this->obj = $this->TipoParteMaquina->find($id); |
− | */
| |
− | public function index($page=1) | |
− | {
| |
− | $menu = new Menus(); | |
− | $this->listMenus = $menu->getMenus($page);
| |
| } | | } |
− |
| + | |
− | /**
| + | public function create() { |
− | * Crea un Registro
| + | if ($this->has_post('tipo_parte_maquina')) { |
− | */
| + | $obj = new TipoParteMaquina($this->post('tipo_parte_maquina')); |
− | public function create () | + | |
− | {
| + | $obj->version = 1; |
− | /**
| + | if ($obj->save()) { |
− | * Se verifica si el usuario envio el form (submit) y si ademas
| + | Flash::notice('Operación Exitosa'); |
− | * dentro del array POST existe uno llamado "menus"
| + | Router::route_to('controller: tipo_parte_maquina','action: index','id: 1'); |
− | * el cual aplica la autocarga de objeto para guardar los
| + | } else { |
− | * datos enviado por POST utilizando autocarga de objeto
| + | Flash::error('No se Guardo!'); |
− | */
| + | $this->$obj = $obj; |
− | if($this->has_post('menus')){ | + | $this->render('create'); |
− | /**
| |
− | * 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($this->post('menus')); | |
− | //En caso que falle la operación de guardar | |
− | if(!$menu->save()){ | |
− | 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{
| |
− | Flash::success('Operación exitosa');
| |
| } | | } |
| } | | } |
| } | | } |
| | | |
− | /**
| + | public function edit($id=0) { |
− | * Edita un Registro
| + | |
− | */
| + | if ($this->has_post('tipo_parte_maquina')) { |
− | public function edit($id = null) | + | $obj = new TipoParteMaquina($this->post('tipo_parte_maquina')); |
− | {
| + | //$obj->version= $this->ciudad->version+1; |
− | $menu = new Menus();
| + | if ($obj->update()) { |
− | if($id != null){ | + | Flash::notice('Operación Exitosa'); |
− | //Aplicando la autocarga de objeto, para comenzar la edición
| + | Router::route_to('controller: tipo_parte_maquina','action: index','id: 1'); |
− | $this->menus = $menu->find((int)$id); | |
− | }
| |
− | //se verifica si se ha enviado el formulario (submit)
| |
− | if($this->has_post('menus')){
| |
− |
| |
− | if(!$menu->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'); | + | Flash::error('No se Guardo!'); |
| + | $this->render('edit'); |
| } | | } |
| + | }else { |
| + | $this->obj = $this->TipoParteMaquina->find($id); |
| } | | } |
| } | | } |
| | | |
− | /**
| + | public function delete($id=0) { |
− | * Eliminar un menu
| + | $obj = $this->TipoParteMaquina->find($id); |
− | *
| + | |
− | * @param int $id
| + | if($obj->delete()) { |
− | */
| + | Flash::notice('Operación Exitosa'); |
− | public function del($id = null) | + | }else{ |
− | {
| + | Flash::error('No se Eliminó!'); |
− | $menu = new Menus(); | |
− | if ($id) { | |
− | if (!$menu->delete((int)$id)) {
| |
− | Flash::error('Falló Operación');
| |
− | } | |
| } | | } |
− | //enrutando al index para listar los menus
| + | |
− | Router::route_to('action: index'); | + | Router::route_to('controller: tipo_parte_maquina','action: index','id: 1'); |
| } | | } |
| } | | } |
| + | ?> |
| </source> | | </source> |
| | | |
− | == Vistas ==
| + | Las vistas: |
− | Agregamos las vistas...
| |
− | | |
− | '''''[apps]/views/menus/index.phtml'''''
| |
− | <source lang="php" line>
| |
− | <div class="content">
| |
− | <?php echo View::content(); ?>
| |
− | <h3>Menus</h3>
| |
− | <ul>
| |
− | <?php foreach ($listMenus->items as $item) : ?>
| |
− | <li>
| |
− | <?php echo link_to("menus/create",'Agregar'); ?>
| |
− | <?php echo link_to(array("menus/edit/$item->id/", 'Editar')) ?>
| |
− | <?php echo link_to(array("menus/del/$item->id/", 'Borrar')) ?><br/>
| |
− | <strong><?php echo $item->nombre ?> - <?php echo $item->titulo ?></strong>
| |
− | </li>
| |
− | <?php endforeach; ?>
| |
− | </ul>
| |
− |
| |
− | <?php if($listMenus->prev) echo Html::link("menus/index/$listMenus->prev/", '<< Anterior |'); ?>
| |
− | <?php if($listMenus->next) echo Html::link("menus/index/$listMenus->next/", '| Próximo >>'); ?>
| |
− | </div>
| |
− | </source>
| |
| | | |
| + | create.phtml |
| | | |
− | '''''[apps]/views/menus/create.phtml'''''
| |
| <source lang="php" line> | | <source lang="php" line> |
− | <?php View::content(); ?> | + | <h1>Crear tipo de parte de máquina</h1> |
− | <?php echo form_tag('menus/create/') ?> | + | <?php View::content() ?> |
− | <table>
| |
− | <tr>
| |
− | <td>Nombre</td>
| |
− | <td><?php echo text_field_tag(array('menus.nombre')) ?></td>
| |
− | </tr>
| |
− | <tr>
| |
− | <td>Titulo</td>
| |
− | <td><?php echo text_field_tag(array('menus.titulo')) ?></td>
| |
− | </tr>
| |
− | <tr>
| |
− | <td> </td>
| |
− | <td><?php echo submit_tag('Agregar') ?></td>
| |
− | </tr>
| |
− | </table>
| |
− | <?php echo end_form_tag() ?>
| |
− | </source>
| |
| | | |
| + | <?php echo form_tag("tipo_parte_maquina/create")?> |
| | | |
− | '''''[apps]/views/menus/edit.phtml'''''
| + | <label for="tipo_parte_maquina.nombre">Nombre:</label> |
− | <source lang="php" line> | + | |
− | <?php View::content(); ?>
| + | <?php echo textupper_field_tag('tipo_parte_maquina.nombre') ?> |
− | <?php echo form_tag('menus/edit/') ?> | + | |
− | <table>
| + | <?php echo submit_tag('Guardar','class: save') ?> |
− | <tr>
| + | <?php echo end_form_tag(); ?> |
− | <td>Nombre</td> | |
− | <td><?php echo text_field_tag(array('menus.nombre')) ?></td>
| |
− | </tr>
| |
− | <tr>
| |
− | <td>Titulo</td> | |
− | <td><?php echo text_field_tag(array('menus.titulo')) ?></td>
| |
− | </tr>
| |
− | <tr>
| |
− | <td> </td>
| |
− | <?php echo hidden_field_tag(array('menus.id')) ?>
| |
− | <td><?php echo submit_tag('Actualizar') ?></td>
| |
− | </tr>
| |
− | </table>
| |
− | <?php echo end_form_tag() ?> | |
| </source> | | </source> |
| | | |
− | == Probando el CRUD ==
| |
− | 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]].
| |
− |
| |
− | * '''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.
| |
| [[Categoría:Tutoriales KumbiaPHP]] | | [[Categoría:Tutoriales KumbiaPHP]] |
− |
| |
− | == Descarga ==
| |
− | Descarga: [http://dl.dropbox.com/u/2807704/kumbiaPHP/v1_b1/app_crud.zip app_crud] para el '''core''' de Spirit v1.0 '''beta1'''.
| |
− |
| |
− | Este ejemplo de descarga esta apuntado a la base de datos '''test''', usuario '''root''' y clave '''123'''.
| |