7. Primer programa: scaffolding, o andamiaje

Ha llegado el momento de hornear un poco y de hacer nuestro primer programa con el CakePHP. En la mayoría de sitios web utilizan la técnica scaffolding (andamiaje) para construir este primer programa; nosotros haremos lo mismo.

Scaffold quiere decir andamio: http://www.wordreference.com/es/translation.asp?tranword=scaffold; es decir, esta característica del CakePHP permite construir aplicaciones web de manera rápida y sencilla. Bueno, no es del todo correcto decir que el andamiaje permite construir aplicaciones web, puesto que más bien sirve para trabajar en las primeras etapas de los proyectos, en que es posible que se produzcan cambios en el esquema de las bases de datos. El andamiaje permite obtener listados de los registros de las tablas de la base de datos, así como insertarlos, borrarlos y editarlos.

Más concretamente, en la documentación oficial de CakePHP, en www.cakephp.org, se puede leer lo siguiente: “El andamiaje se ha incluido en CakePHP para que los programadores tengan menos presión. El andamiaje analiza la base de datos y crea listas estándar con botones para añadir, borrar y editar.” A algunos os gustará más que a otros, esto del andamiaje; la mayoría estaremos de acuerdo en que está muy bien para empezar con el CakePHP, y para hacer pruebas con las bases de datos. De hecho, según he entendido, este es básicamente el uso que se le da.

Bueno, manos a la obra. Por una parte, hemos dicho que CakePHP implementa el patrón de diseño MVC; por otra, tenemos nuestra base de datos discografia, con las tablas artistas y discos. El modelo para la tabla artistas es este, y se tiene que guardar en c:\wamp\discografia\app\models\artista.php:

 class Artista extends AppModel{ var $name = 'Artista'; } 

El modelo para la tabla discos es este otro, y se tiene que  guardar en c:\wamp\www\discografia\app\models\disco.php:

 class Disco extends AppModel{ var $name = 'Disco'; } 

El controlador para los artistas es este, y se tiene que guardar en c:\wamp\www\discografia\app\controllers\artistas_controller.php:

 class ArtistasController extends AppController{ var $name = 'Artistas'; var $scaffold; } 

El controlador para los discos es este otro, y se tiene que guardar en c:\wamp\www\discografia\app\controllers\discos_controller.php:

 class DiscosController extends AppController{ var $name = 'Discos';}

Llegados aquí, es importante decir que, para que todo funcione, debemos respetar unas convenciones establecidas por CakePHP: en http://wiki.lidsol.net/wiki/index.php?title=Convenciones_de_CakePHP las explican muy bien. Nosotros, por ejemplo, hemos tenido que utilizar la convención para el nombre del modelo, que dice que el nombre de la clase que representa el modelo tiene que estar en singular, y su primera letra tiene que estar en mayúscula (Artista y Disco). En el momento de crear las tablas también hicimos uso de estas convenciones: las tablas de la base de datos tienen que estar siempre en plural. En principio, después de haber creado los modelos y los controladores tal y como se explica un poco más arriba, si uno arranca el WampServer y escribe, en la barra de direcciones, http://localhost/discografia/artistas, debería ver una página con el listado de los artistas -que en nuestro caso está vacío porque no hemos insertado ningún registro-. Yo no pude obtener este listado a la primera porque sucede que, para que funcione correctamente, se tiene que habilitar el módulo mod_rewrite del Apache, de modo que, para obtenerlo a la segunda, tuve que editar el archivo c:\wamp\bin\apache\apache2.2.8\conf\httpd.conf y descomentar la línea #LoadModule rewrite module modules/mod_rewrite.so, borrando la almohadilla. A continuación reinicié el WampServer y escribí, en la barra de direcciones, http://localhost/discografia/artistas. Finalmente, obtuve así la pantalla con el listado vacío de los artistas: that’s scaffolding!
Anuncios

22 comentarios

  1. hasta aquí todo bien, pero me aparece un error:

    Missing Controller

    Error: ArtistasController could not be found.

  2. Hola Juan,

    CakePHP te dice que no puede encontrar el controlador. ¿En qué carpeta lo guardas? ¿Qué nombre le pones exactamente? Un saludo 🙂

  3. hola hola…
    ya he podido solucionarlo; al copiar el código no incluía las etiquetas
    lo copiaba tal como lo pones, creo que has omitido esa parte

    saludos!

  4. Hola Juan, ¿qué tal estos primeros pasos, jeje?

    Claro, hay que poner todo el código de este post entre las etiquetas . Creo que en la mayoría de los ejemplos aparece así, sin estas etiquetas. ¡Un saludo!

  5. Error: Database table discografia for model Discografium was not found.

    Hola, me sale este error…¿puedes echarme un cable?…
    gracias

  6. He creado una tabla discografia y ya no sale el error

  7. Hola, he creado uno (inquilino) y no tengo problemas accedo asi: http://localhost/cake/inquilino,
    pero al crear otro para usuarios me sale el siguiente error:
    Not Found
    Error: The requested address ‘/’ was not found on this server.

    lo he hecho de la misma forma que para el inquilino.
    me podrían ayudar por favor?.
    Gracias!!

  8. Ahh, me olvide de poner el codigo que tengo:

    en app/model/user.php

    en app/controllers/user_controller.php
    <?
    class UsersController extends AppController
    {
    var $scaffold;
    }

    En la base de datos la tabla se llama users

    Gracias!!!

  9. creo que no salio bien lo que puse arriba…

    en app/model/user.php
    class User extends AppModel
    {
    var $name=’User’;

    }
    }

  10. Hola,

    Pues he seguido todos los puntos, pero cuando intento acceder a http://localhost/discografia/artistas me da un error 404.

    He comprobado si apache tiene cargado el modulo mod_rewrite y efectivamente esta cargado.

    ¿Alguna ayuda?

    Gracias y enhorabuena por el blog

  11. Hola Canarias. ¿Has arrancado el servidor? A lo mejor se trata de un despiste y no has arrancado el WampServer (eso si seguiste el post de la instalación de este software en un Windows) ¡Un saludo!

  12. Hola TutorialCake…

    Si apache esta arrancado, junto con mysql…. No consigo que se muetre la pagina me da un 404

    Saludos y gracias por la respuesta

    • Hola de nuevo 🙂

      Pues no sé a qué puede deberse, la verdad. Parece que se trata de la configuración de Apache. En principio, siguiendo los pasos de instalación de WampServer en https://tutorialcakephp.wordpress.com/2008/10/16/2-instalar-cakephp/ debería funcionar. ¿Utilizas este programa o trabajas en Ubuntu? Si usas WampServer, siento no poder decirte qué puede ser; si lo resuelves, puedes explicar aquí como lo hiciste. También puedes intentar en algún grupo de Google.

      Saludos!

  13. Hola

    Gracias por la respuesta, utilizo MAMP en Mac, y acabo de comprobar la configuración de apache esta correcta (con modulo mod_rewrite cargado). No obstante lo he solucionado, descomentando la linea
    Configure::write(‘App.baseUrl’, env(‘SCRIPT_NAME’));
    En el fichero app/core

    Claro esta que de esta forma, no puedo utilizar mod_rewrite, y en su defecto utilizo las pretty urls proporcionadas por el propio framework. Las direcciones cambian a http://localhost/discografia/index.php/artistas

    Pero para seguir probando, me viene bien…

    Gracias y saludos

    Si consigo resolver el problema del rewrite te aviso…

    • Para eso estamos 😉

      Tomo nota de lo que comentas y cuando pueda le echo un vistazo. No he tocado esta opción de Cake, la verdad. ;-P ¡Saludos!

  14. hola a todos; necesito por fa que me ayuden

    he hecho todos los pasos pero cuando llego a esta parte, me sale el siguiente error

    Fatal error: Class ‘ArtistasController’ not found in C:\wamp\www\cake\cake\dispatcher.php on line 155

    como lo puedo solucionar

    • Hola Sebasca5,

      ¿Conseguiste solucionar el problema? (Es normal que no salga bien a la primera, jeje) ¿Dónde guardas el controlador?

      ¡Saludos!

  15. Hola, he realizado todo correctamente pero al cargar http://localhost/discografia/artistas me sale error 404,
    alguien sabe a que puede ser debido??
    Un saludo.

  16. En cambio http://localhost/discografia funciona correctamente.

  17. Hola Mario, ¿qué tal? ¿Solucionaste tu problema?

    Adjunta cuando puedas tu código aquí y lo miramos ;-P

    ¡Saludos!

    • Hola tutorialcakephp, el código es tal y como muestra el tutorial añadiendo las etiquetas de php, hay alguna configuración de directorios adicional??

  18. Hola Mario. ¿Has habilitado el módulo mod_rewrite de Apache?

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: