10. Añadir y listar artistas: HTML helpers, o ayudantes HTML

Finalmente, el código del archivo artistas_controller.php queda así:


class ArtistasController extends AppController{       

    var $name = 'Artistas';       

    function index(){          

        $this->set('artistas',$this->Artista->findAll());       

    }

    function add(){

        if (!empty($this->data)){

            if ($this->Artista->save($this->data)){

                $this->flash('El artista se ha guardado correctamente.','/artista');

            }
        }
    }
}

El código de la vista index.thtml es este:

<h1>Artistas de discografia</h1>
<table>
   <tr>
      <th>Artista</th>
   </tr>
   <?php foreach ($artistas as $artista): ?>
   <tr>
      <td>
         <?php echo $artista['Artista']['nombre']; ?>
      </td>
   </tr>
   <?php endforeach; ?>
</table>

Y el código de la vista add.thtml es este:

<h1>Nuevo artista</h1>
<form method="post" action="<?php echo $html->url('/artistas/add')?>">
   <p>
      Nombre del artista:
      <?php echo $html->input('Artista/nombre', array('size' => '40'))?>
      <?php echo $html->tagErrorMsg('Artista/title', 'Tienes que introducir el nombre') ?>
   </p>
   <p>
      <?php echo $html->submit('Guardar') ?>
   </p>
</form>

Como tenía problemas para indentar el código, me he descargado el editor Araneae. Dicho esto, vamos a lo importante.

Los HTML helpers se utilizan para crear etiquetas HTML y están disponibles en las vistas de forma predeterminada, para ayudar a diseñarlas. Según la documentación oficial de CakePHP, “el ayudante HTML tiene dos objetivos principales: ayudar en la inserción de secciones HTML frecuentes, y ayudar en la creación de formularios”. Resumiendo, los ayudantes HTML simplifican la construcción de elementos HTML en las vistas.

Para aprovechar toda la funcionalidad que nos brinda CakePHP, podemos declarar varias variables en los controladores, por ejemplo $helpers. Aunque, como hemos dicho antes, los ayudantes HTML se cargan automáticamente en las vistas, se puede declarar el array $helpers en el controlador ArtistasController. Para cargar los ayudantes HTML, AJAX y Javascript, tendríamos que escribir esta declaración:

var $helpers = array(‘Html’,’Ajax’,’Javascript’);

En este ejemplo hemos visto que el archivo add.thtml incorpora el objeto $html, que llama a los métodos url, input, tagErrorMsg y submit. Más concretamente, el objeto $html pertence a la clase HtmlHelper, que extiende la clase Helper. Helper y HtmlHelper están en el núcleo de CakePHP, en c:\wamp\www\discografia\cake\libs\view\helper.php y c:\wamp\www\discografia\cake\libs\view\helpers\html.php, respectivamente.

En la clase HtmlHelper está el código de los métodos utilizados en nuestro ejemplo: url, input, tagErrorMsg y submit. El método input crea un campo de texto; el método submit envía la información de un formulario; y el método tagErrorMsg muestra mensajes de error. Para ampliar esta información puedes hacer clic aquí.

Anuncios

5 comentarios

  1. Buenas. Primero de todo gracias por el tutorial, lo estoy siguiendo y me es de gran ayuda para iniciarme en cake.
    Empece utilizando la version 1.2 y hace un par de post te pasaste a la version 1.1 Yo segui utilizando la 1.2 y ahora me da error con $html->input, form y tagErrorMsg. Buscando descubri que los 2 primeros ahora funcionan con el objeto form. Pero con el tagErrorMsg no se como hacer , he buscado y no encuentro nada claro.

    • Gracias Dani,

      Me alegro de que te sirva de ayuda, pero ahora mismo no sabría qué decirte, jeje. ¿Qué error te sale?

  2. tengo el mismo problema me sale el siguienet error

    Warning (512): Method FormHelper::tagErrorMsg does not exist [CORE\cake\libs\view\helper.php, line 143]

    lo tengo asi en el archivo
    tagErrorMsg(‘Post/title’ , ‘Title is required.’); ?>

  3. perdon lo tengo es asi

    tagErrorMsg(‘Post/title’ , ‘Title is required.’); ?>

  4. bueno se que ha pasado un tiempo desde que se publico este tutorial que para comenzar explica de maravilla como y donde colocar cada uno de los archivos que es lo que mas cuesta al principio, pero hice el tutorial tal cual y me sale el siguiente error

    SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘FindAll’ at line 1 [CORE\cake\libs\model\datasources\dbo_source.php, line 673]
    si le quito el findAll de la clase ArtistasController no me muestra tal error xq sera a alguien le paso eso?? pence que lo habia escrito mal pero lo copie y pegue tal como esta aca y me da el mismo error gracias si pueden darme una respuesta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: