Id | +Title | +Created | +
---|---|---|
+ | + Html->link($post['Post']['title'], + array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); ?> + | ++ |
Created:
+ + + +Verifica que ahora funciona el enlace que antes daba un error desde ``/posts/index`` o puedes ir manualmente si escribes ``/posts/view/1``. + + +Añadiendo artículos (*posts*) +============================= + +Ya podemos leer de la base de datos nuestros artículos y mostrarlos en pantalla, ahora vamos a ser capaces de crear nuevos artículos y guardarlos. + +Lo primero, añadir una nueva acción ``add()`` en nuestro controlador PostsController: + +:: + + set('posts', $this->Post->find('all')); + } + + public function view($id) { + $this->Post->id = $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('Your post has been saved.'); + $this->redirect(array('action' => 'index')); + } + } + } + } + ?> + +.. note:: + + Necesitas incluír el SessionComponent y SessionHelper en el controlador para poder utilizarlo. Si lo prefieres, puedes añadirlo en AppController y será compartido para todos los controladores que hereden de él. + +Lo que la función add() hace es: si el formulario enviado no está vacío, intenta salvar un nuevo artículo utilizando el modelo *Post*. Si no se guarda bien, muestra la vista correspondiente, así podremos mostrar los errores de validación si el artículo no se ha guardado correctamente. + +Cuando un usuario utiliza un formulario y efectúa un POST a la aplicación, esta información puedes accederla en ``$this->request->data``. Puedes usar la función :php:func:`pr()` o :php:func:`debug()` para mostrar el contenido de esa variable y ver la pinta que tiene. + +Utilizamos el SessionComponent, concretamente el método :php:meth:`SessionComponent::setFlash()` para guardar el mensaje en la sesión y poder recuperarlo posteriormente en la vista y mostrarlo al usuario, incluso después de haber redirigido a otra página mediante el método redirect(). Esto se realiza a través de la función :php:func:`SessionHelper::flash` que está en el layout, que muestra el mensaje y lo borra de la sesión para que sólo se vea una vez. El método :php:meth:`Controller::redirect