Ver índice de contenidos del libro

14.2. Scaffolding

El scaffolding es muy útil cuando se empieza a desarrollar una aplicación. Con un solo comando, Symfony es capaz de crear un módulo entero basado en la descripción de una tabla de la base de datos.

14.2.1. Generando el scaffolding

Para generar el scaffolding del módulo article basado en la clase Article del modelo, se utiliza el siguiente comando:

> symfony propel-generate-crud miaplicacion article Article

Symfony comprueba la definición de la clase Article en el archivo schema.yml y crea una serie de acciones y plantillas que guarda en el directorio miaplicacion/modules/article/ y que están basadas en esa definición.

El módulo generado incluye 3 vistas. La vista list, que es la vista por defecto, muestra las filas de datos de la tabla blog_article cuando se accede a la aplicación mediante http://localhost/miaplicacion_dev.php/article, tal y como muestra la figura 14-2.

Vista "list" del módulo "article"

Figura 14.2 Vista "list" del módulo "article"

Si se pincha sobre el identificador de un artículo, se muestra la lista show. Todos los detalles de una fila de datos se muestran en una única página, como se ve en la figura 14-3.

Vista "show" del módulo "article"

Figura 14.3 Vista "show" del módulo "article"

Si se modifica un artículo pinchando sobre el enlace edit o si se crea un nuevo artículo mediante el enlace create en la vista list, se muestra la vista edit, que se puede ver en la figura 14-4.

Mediante las opciones incluidas en este módulo, es posible crear nuevos artículos y borrar o modificar los artículos existentes. El código generado es una buena base a partir de la cual empezar el desarrollo de la aplicación. El listado 14-2 muestra las acciones y plantillas generadas para el nuevo módulo.

Vista "edit" del módulo "article"

Figura 14.4 Vista "edit" del módulo "article"

Listado 14-2 - Elementos generados para las operaciones CRUD, en miaplicacion/modules/article/

// En actions/actions.class.php
index           // Redirige a la acción "list"
list            // Muestra un listado de todas las filas de la tabla
show            // Muestra todas las columnas de una fila
edit            // Muestra un formulario para modificar la columnas de una fila
update             // Acción que se llama en el formulario de la acción "edit"
delete             // Borra una fila
create             // Crea una nueva fila
 
// En templates/
editSuccess.php  // Formulario para modificar una fila (vista "edit")
listSuccess.php  // Listado de todas las filas (vista "list")
showSuccess.php  // Detalle de una fila (vista "show")

El código de todas estas acciones y plantillas es bastante sencillo y explícito, por lo que en vez de mostrar todo el código para explicarlo, el listado 14-3 muestra un pequeño extracto de la clase de las acciones.

Listado 14-3 - Clase Action generada, en miaplicacion/modules/article/actions/actions.class.php

class articleActions extends sfActions
{
  public function executeIndex()
  {
    return $this->forward('article', 'list');
  }
 
  public function executeList()
  {
    $this->articles = ArticlePeer::doSelect(new Criteria());
  }
 
  public function executeShow()
  {
    $this->article = ArticlePeer::retrieveByPk($this->getRequestParameter('id'));
    $this->forward404Unless($this->article);
  }
  ...

Para obtener una aplicación básica, solamente es necesario modificar el código generado para ajustarlo a las necesidades de la aplicación y repetir la generación del código de las operaciones CRUD para el resto de tablas con las que se deba interactuar. Generar el scaffolding de una aplicación permite dar un gran impulso inicial a su desarrollo, por lo que es buena idea dejar que Symfony haga el trabajo sucio y el desarrollador se centre en el diseño de la interfaz y de otros detalles específicos.

14.2.2. Iniciando el scaffolding

Además de generarlo, también es posible "iniciar" el scaffolding, que se utiliza sobre todo para comprobar que se puede acceder a los datos de la base de datos. Un scaffolding que solo ha sido iniciado es muy fácil de crear y muy fácil de borrar una vez que se ha comprobado que todo funciona correctamente.

El siguiente comando inicia el scaffolding correspondiente al módulo article que maneja las filas de datos correspondientes a la clase Article del modelo:

> symfony propel-init-crud miaplicacion article Article

Una vez iniciado, se puede acceder a la vista list mediante la acción por defecto:

http://localhost/miaplicacion_dev.php/article

Las páginas resultantes son exactamente iguales que las que tiene un scaffolding completamente generado. Estas páginas se pueden utilizar como una interfaz web sencilla para la base de datos.

Si se accede al archivo actions.class.php creado para el módulo article, se comprueba que está vacío, ya que todo hereda de una clase generada automáticamente. Con las plantillas sucede lo mismo: no existe ningún archivo de plantilla en el directorio templates/. El código utilizado en las acciones y plantillas que solamente han sido iniciadas es el mismo que para el scaffolding que se genera completamente, pero se guarda en la cache de la aplicación (miproyecto/cache/miaplicacion/prod/module/autoArticle/).

Durante el desarrollo de la aplicación, los programadores inician los scaffolding para interactuar con los datos, sin importar el aspecto de la interfaz. El objetivo del código generado con este método no es el de ser modificado para ajustarse a los requisitos de la aplicación; un scaffolding que solamente ha sido iniciado se puede considerar como una alternativa sencilla a la aplicación PHPmyadmin para la gestión de la información de la base de datos.