Herramientas CakePHP: Scaffolding y bake

12 febrero 2009 at 7:34 pm 13 comentarios

En esta entrada vamos a ver un par de utilidades que nos ayudan a lanzar casi desde cero nuestra aplicación CakePHP. Me estoy refiriendo al scaffolding y a bake. Nos vamos a servir de la aplicación que desarrollamos en “Mi primera aplicación CakePHP” (parte 1 y parte 2), que era un pequeño gestor de enlaces. Empezamos con el scaffolding, que podemos traducir como andamiaje. Partimos de una instalación de CakePHP limpia en la que he configurado la conexión a la base de datos. En dicha base de datos tengo definidas las tablas para enlaces y comentarios tal como vimos en las entradas nombradas anteriormente. También tomamos los mismos modelos que teníamos entonces: comment.php y link.php. Ahora creamos un controlador vacío salvo la variable scaffold:

<?php
class LinksController extends AppController {
	var $scaffold;
}
?>

Y exactamente igual para los comentarios:

<?php
class CommentsController extends AppController {
	var $scaffold;
}
?>

Y con esto apuntamos nuestro navegador a nuestra aplicación CakePHP (por ejemplo en http://server:port/) seguido por “links” vemos el efecto de scaffolding:

Scaffolding 1

Podemos ver un listado de enlaces, además podemos añadir nuevos enlaces o comentarios o listar estos últimos. Si añadimos algún enlace y nos movemos un poco por las páginas generadas podemos notar que CakePHP ha reconocido la relación entre Link y Comment y en las páginas aparece esa relación.

Scaffolding 2

Scaffolding 3

Como vemos el scaffolding nos puede ayudar enormemente en los pasos iniciales de un proyecto, o para poder introducir datos para probar. Vamos ahora con bake. Bake es una herramienta de línea de comandos, por lo que lo más cómodo para utilizarla es tenerla en el path y por tanto la he añadido. En este caso vamos a crear una aplicación nueva a partir de nuestra base de datos ya creada. Nos situamos en la carpeta en la que queremos crear nuestra aplicación y ejecutamos cake bake appname donde appname es el nombre que queremos dar a nuestra aplicación (testbake en mi caso). CakePHP después de que le confirmemos la ruta de la aplicación procede a copiar el esqueleto de una aplicación en el lugar elegido y acto seguido nos ayuda a configurar el acceso a la base de datos. Si ahora nos situamos en una consola en el directorio raíz de nuestra aplicación (C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\testbake en mi caso) y ejecutamos cake bake vemos el menú de la aplicación.

Bake 1

Vemos opciones para “hornear” (traducción de bake) un proyecto (copia el esqueleto de aplicación tal como acabamos de hacer), la configuración a la base de datos (también lo acabamos de hacer), modelo, controladores y vistas. Empezamos con los modelos, por lo que selecciono la opción adecuada. Puedo ver que CakePHP ha encontrado mis tablas de base de datos. Vamos con el modelo para los enlaces. Vemos que nos pregunta si queremos incluir validación y en caso afirmativo nos aparece un listado para que seleccionemos la validación de cada campo. Después nos pregunta si queremos añadir relaciones. Si respondemos afirmativamente nos detecta la relación existente en la base de datos y nos pide confirmarla:

Bake 2

Finalmente nos pregunta si queremos crear clases de test para nuestro modelo. De momento no voy a crear clases de test. Podemos ver el modelo que ha creado:

 array('maxlength'),
		'url' => array('url')
	);

	//The Associations below have been created with all possible keys, those that are not needed can be removed
	var $hasMany = array(
			'Comment' => array('className' => 'Comment',
								'foreignKey' => 'link_id',
								'dependent' => false,
								'conditions' => '',
								'fields' => '',
								'order' => '',
								'limit' => '',
								'offset' => '',
								'exclusive' => '',
								'finderQuery' => '',
								'counterQuery' => ''
			)
	);

}
?>

Parece bastante aceptable aunque sea como punto de partida. Haremos lo mismo con el modelo de los comentarios y pasamos a los controladores. Si seleccionamos la opción de controladores y le indicamos que queremos crearlo interactivamente, lo primero que nos pregunta es si queremos hacer scaffolding. Si le decimos que sí nos creará el controlador con la variable scaffold tal como hemos visto antes. Si por el contrario le decimos que no nos irá preguntando si queremos añadir métodos comunes (index, add, etc), si vamos a usar algún Helper, Componente o Sesiones. Según lo que le indiquemos nos creará un controlador que nos servirá muy bien como punto de partida. Finalmente vamos con las vistas. Para crear vistas nos pregunta si queremos vistas creadas con scaffolding o sin él. Si es sin scaffolding nos creará el archivo de la vista en el directorio adecuado pero nada más (CakePHP no puede adivinar lo que queremos hacer) y si es con scaffolding nos creará unas vistas que igualmente no pueden ser bastante útiles como punto de partida.

<div class="comments form">
create('Comment');?>
	<fieldset>
 		<legend></legend>
	input('link_id');
		echo $form->input('comment');
	?>
	</fieldset>
end('Submit');?></div>
<div class="actions">
<ul>
	<li>link(__('List Comments', true), array('action'=>'index'));?></li>
	<li>link(__('List Links', true), array('controller'=> 'links', 'action'=>'index')); ?></li>
	<li>link(__('New Link', true), array('controller'=> 'links', 'action'=>'add')); ?></li>
</ul>
</div>

Por último indicar que una vez nos acostumbremos a bake podemos saltarnos los menús, ya que casi todas las acciones tiene un comando más directo. Por ejemplo:

  • cake bake model Link nos llevaría a crear el modelo para los enlaces.
  • cake bake controller Comments scaffold nos llevaría a la creación de un controlador para comentarios con la variable scaffold.

Como conclusión vemos que estas herramientas de CakePHP nos pueden ser muy útiles en el arranque de un nuevo proyecto, aunque después siempre tendremos que tocar todo.

Anuncios

Entry filed under: PHP. Tags: , .

Entender jQuery. Principios básicos Desarrollo OSGi en Eclipse

13 comentarios Add your own

  • 1. mariuss  |  22 septiembre 2009 en 6:28 am

    Hola no se porque razon al poner el comando cake bake en la terminal de Mac me aparece -bash: cake: command not found
    agradeceria tu ayuda.

  • 2. Miguel  |  22 septiembre 2009 en 8:07 am

    Hola mariuss, eso quiere decir que te falta añadir el directorio en el que se encuentra cake al path. Lo que no te sé decir es la mejor forma de hacer eso en Mac porque no he tenido ningún Mac, pero seguro que no es difícil encontrarlo.

    Un saludo y gracias por tu comentario.

  • 3. cristian  |  21 octubre 2009 en 6:44 pm

    Excelente !!
    Había encontrado la forma directa de generar codigo como:
    cake bake model

    y no usando
    cake bake

    jajaja

    se puede generar las funcionalidades casi completamente.

    yeah!

  • 4. Guillermo  |  4 octubre 2010 en 8:32 pm

    Yo tengo entendido que scaffold se escribe en un controlador. Y de hecho vos decís lo mismo, pero en el ejemplo construís modelos en vez de controladores:

    Ahora creamos un controlador vacío salvo la variable scaffold:1

    Y exactamente igual para los comentarios:1

  • 5. Guillermo  |  4 octubre 2010 en 8:33 pm

    Va de nuevo:

    Ahora creamos un controlador vacío salvo la variable scaffold:
    1
    2 class Link extends AppModel {
    3 var $scaffold;
    4 }
    5

    Y exactamente igual para los comentarios:
    1
    2 class Comment extends AppModel {
    3 var $scaffold;
    4 }
    5

  • 6. Miguel  |  5 octubre 2010 en 2:41 pm

    Tienes toda la razón Guillermo.

    He modificado los código. Muchas gracias por leerme y por la corección.

  • 7. silva  |  26 diciembre 2010 en 3:14 am

    buen material

  • 8. kiko  |  28 diciembre 2010 en 2:27 pm

    Gran artículo, aunque tengo una duda: he generado todo con bake pero no he necesitado generar las vistas al utilizar scaffolding en los controladores. Mi pregunta es: ¿como puedo modificar las vistas generadas con esta herramienta?

  • 9. Miguel  |  28 diciembre 2010 en 2:42 pm

    Hola Kiko, muchas gracias por tu comentario.

    Para modificar las vistas creadas mediante el scaffolding puedes crear plantillas (para un determinado controlador o para toda la aplicación). Esta información la he sacado de cómo personalizar las vistas scaffold de la documentación cakephp.

    Como dicen en dicha documentación el scaffold no se recomienda para producción. Una vez que ya pasamos la fase inicial del proyecto (con muchos cambios) lo suyo es generar las vistas y ya trabajar sobre ellas.

    Espero que te sea útil.

  • 10. kiko  |  28 diciembre 2010 en 2:49 pm

    q rápido!!! estaba leyendo justo eso ahora mismo!
    Pues seguiré tu consejo ya que me has ayudado mucho en tus tutoriales para comenzar a manejar cake.

    Un saludo y mil gracias

  • 11. Santiago  |  10 febrero 2011 en 2:59 pm

    Respecto al problema de mariuss que le aparecía “-bash: cake: command not found” al escribir “cake bake” en su consola de mac.
    Me pasó lo mismo en la consola de linux, la solución fué, en lugar de escribir “./cake bake” en lugar de solo “cake bake”

  • 12. Jyr  |  2 marzo 2011 en 10:53 pm

    Para lo del path de mac, se debe editar el .profile que se encuentra en el home del usuario y agregar algo como export PATH=”/tu/paht/cake/console:maspaths” despues hacer un source .profile

  • 13. Juan Alberto Gonzalez  |  30 octubre 2012 en 10:10 pm

    Hola ¿alguien sabe como puedo crear tablas editables con cakephp? se que con jquery si se puede con una libreria llamada jeditable, pero no se como hacer eso con cakephp

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

Trackback this post  |  Subscribe to the comments via RSS Feed


Mi perfil

View Miguel Orbegozo's profile on LinkedIn

Feedjit

Feeds

Otros…

BlogESfera Directorio de Blogs Hispanos - Agrega tu Blog

Bitacoras.com

Add to Technorati Favorites


A %d blogueros les gusta esto: