Sie sind auf Seite 1von 8

Creacin de una aplicacin con el framework CakePHP: blog.

1. Crear base de datos En la configuracin se cre la base de datos "caketest" se crear la tabla "posts" y se agregaran algunos datos para prueba. Para configuracion de la base de datos ver el video vinculo en Referencias
/* tabla para nuestros articulos */ CREATE TABLE posts ( IdPost INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, Titulo VARCHAR(50), Contenido TEXT, Creado DATETIME DEFAULT NULL, Modificado DATETIME DEFAULT NULL); /* algunos valores de prueba */ INSERT INTO posts (Titulo,Contenido,Creado) VALUES ('Este es el titulo', 'Este es el contenido.', NOW()); INSERT INTO posts (Titulo,Contenido,Creado) VALUES ('En un lugar de la mancha', 'Del cual no me quiero (o puedo) acordar....', NOW()); INSERT INTO posts (Titulo,Contenido,Creado) VALUES ('Otro titulo', 'Yo soy el contenido de este post.', NOW());

2. Crear el modelo para el blog: los modelos se guardan en la carpeta \app\Model , ah se crea el archivo Post.php cuyo contenido es:

<?php class Post extends AppModel { public $name = 'Post'; } ?>

3. Crear el controlador para los artculos: estos se guardan en la carpeta \app\Controller, el archivo controlador se va a llamar PostsController.php. CakePHP maneja el nombre de los archivos con las tablas de la base de datos y las vista en PHP, de ah la relacin entre los nombres.

<?php class PostsController extends AppController { public $helpers = array ('Html','Form'); function index() { $this->set('posts', $this->Post->find('all')); } } ?>

Al controlador se le ha agregado una accin representando una funcin concreta o interfaz para la aplicacin (function index(){.). 4. Crear la vista para los artculos: teniendo el modelo (la base de datos) y el controlador (el archivo creado en el punto anterior) ahora se crea la vista para completar esta aplicacin. Las vista se almacenan en \app\View, la vista debe llevar el mismo nombre que el controlador; se debe crear la carpeta Posts y dentro el archivo index.ctp. El contenido del archivo es el siguiente:

<<!-- File: \app\View\Posts\index.ctp --> <h1>Blog posts</h1> <table> <tr> <th>Id</th> <th>Titulo</th> <th>Creado</th> </tr>

<!Aqui se recupera el arreglo $posts presentando los post y organizandolos en una tabla -->
<?php foreach ($posts as $post): ?> <tr> <td><?php echo $post['Post']['IdPost']; ?></td> <td> <?php echo $this->Html->link($post['Post']['Titulo'], array('controller' => 'posts', 'action' => 'view', $post['Post']['IdPost'])); ?> </td> <td><?php echo $post['Post']['Creado']; ?></td> </tr> <?php endforeach; ?> </table>

5. Es necesario agregar las siguientes lneas al archivo PostsController.php para control de de la vista de los post individuales

public function view($id = null) { $this->Post->IdPost = $id; $this->set('post', $this->Post->read()); }

Quedando el archivo de la siguiente manera

<?php class PostsController extends AppController { public $helpers = array ('Html','Form'); function index() { $this->set('posts', $this->Post->find('all')); }

public function view($id = null) { $this->Post->IdPost = $id; $this->set('post', $this->Post->read());


} } ?>

6. Ahora se crea la vista para la funcin view($id) (creada en el punto anterior) en la carpeta \app\View\Posts, el nombre del archivo es view.ctp y el contenido el siguiente:

<!-- File: \app\View\Posts\view.ctp --> <h1><?php echo $post['Post']['Titulo']?></h1> <p><small>Creado: <?php echo $post['Post']['Creado']?></small></p> <p><?php echo $post['Post']['Contenido']?></p>

7. Para agregar post es necesario agregar las siguientes lneas al controlador PostsController.php

public $name = 'Posts'; public $components = array('Session'); public function add() { if ($this->request->is('post')) { if ($this->Post->save($this->request->data)) { $this->Session->setFlash('El post ha sido publicado.'); $this->redirect(array('action' => 'index')); } } }

A este punto el archivo controlador (PostsController.php) debe lucir as:

<?php class PostsController extends AppController { public $helpers = array ('Html','Form'); public $name = 'Posts'; public $components = array('Session'); function index() { $this->set('posts', $this->Post->find('all')); } public function view($id = null) { $this->Post->IdPost = $id; $this->set('post', $this->Post->read()); }

public function add() { if ($this->request->is('post')) { if ($this->Post->save($this->request->data)) { $this->Session->setFlash('El post ha sido publicado.'); $this->redirect(array('action' => 'index')); } } }
}

8. Como en los casos anteriores, la vista para la funcin add() se crea en la carpeta \app\View\Posts, el nombre del archivo es add.ctp y contiene lo siguiente:

<!-- File: \app\View\Posts\add.ctp --> <h1>Agregar Post</h1> <?php echo $this->Form->create('Post'); echo $this->Form->input('Titulo'); echo $this->Form->input('Contenido', array('rows' => '3')); echo $this->Form->end('Guardar Post'); ?>

9. Ahora es necesario agregar la siguiente lnea al archivo \app\view\Posts\index.ctp justo antes de iniciar la tabla con el tag <table>

<?php echo $this->Html->link('Agregar nuevo Post', array('controller' => 'posts', 'action' => 'add')); ?>

10. Las reglas de validacin se escriben en el modelo, se agregan las siguientes lneas al archivo Post.php ubicado en la carpeta \app\Model :

<?php class Post extends AppModel { public $name = 'Post'; public $validate = array( 'Titulo' => array( 'rule' => 'notEmpty' ), 'Contenido' => array( 'rule' => 'notEmpty' ) ); }

11. Siguiendo la misma lnea se agrega la funcin edit($id) al controlador (PostsController.php):

function edit($id = null) { $this->Post->IdPost = $id; if ($this->request->is('get')) { $this->request->data = $this->Post->read(); } else { if ($this->Post->save($this->request->data)) { $this->Session->setFlash('El post ha sido actualizado.'); $this->redirect(array('action' => 'index')); } } }

y la vista en la carpeta \app\View\Posts el archivo edit.ctp :

<!-- File: \app\View\Posts\edit.ctp --> <h1>Editar Post</h1> <?php echo $this->Form->create('Post', array('action' => 'edit')); echo $this->Form->input('Titulo'); echo $this->Form->input('Contenido', array('rows' => '3')); echo $this->Form->input('IdPost', array('type' => 'hidden')); echo $this->Form->end('Guardar cambios'); ?>}

12. Editando el archivo index.ctp se agregan las opciones de Eliminar y Editar post; este archivo queda de la siguiente manera:

<<!-- File: \app\View\Posts\index.ctp --> <h1>Posts del Blog</h1> <?php echo $this->Html->link('Agregar nuevo Post', array('controller' => 'posts', 'action' => 'add')); ?> <table> <tr> <th>Id</th> <th>Titulo</th> <th>Action</th> <th>Creado</th> </tr> <!Aqui se recupera el arreglo $posts presentando los post y organizandolos en una tabla --> <?php foreach ($posts as $post): ?> <tr> <td><?php echo $post['Post']['IdPost']; ?> </td> <td><?php echo $this->Html->link($post['Post']['Titulo'], array('action' => 'view', $post['Post']['IdPost']));?> </td> <td><?php echo $this->Form->postLink('Eliminar', array('action' => 'delete', $post['Post']['IdPost']), array('confirm' => 'Esta Seguro?')) ?> <?php echo $this->Html->link('Editar', array('action' => 'edit', $post['Post']['IdPost']));?> </td> <td><?php echo $post['Post']['Creado']; ?> </td> </tr> <?php endforeach; ?> </table>

13. Al hacer clic en el link Eliminar no ocurre nada ya que no hemos creado la funcin delete() en el archivo controlador (PostsController.php)
function delete($id) { if (!$this->request->is('post')) { throw new MethodNotAllowedException(); } if ($this->Post->delete($id)) { $this->Session->setFlash('El post: ' . $id . ' va a ser borrado.'); $this->redirect(array('action' => 'index')); } }

14. Resultado final

Referencias
1. Video de configuracin de CakePHP con XAMPP en Windows 7 http://www.youtube.com/watch?v=M_dqtZmZbUk 2. Blog original de donde se tomaron los pasos para el video http://criogeniaestudio.blogspot.com/2011/09/instalando-cakephp-1311-sobre-windows-7.html 3. Pgina oficial de CakePHP http://cakephp.org/ 4. Este tutorial en la pgina de CakePHP http://book.cakephp.org/2.0/es/getting-started.html Para detalles sobre las lneas de cdigo, instalacin e instalacin avanzada de CakePHP Alberto Cardenas http://otroblogsobretics.wordpress.com

Das könnte Ihnen auch gefallen