En las aplicaciones web, las operaciones de acceso a los datos se pueden clasificar en una de las siguientes categorías:
Como estas operaciones son tan comunes, se ha creado un acrónimo para referirse a todas ellas: CRUD (por las iniciales de sus nombres en inglés). Muchas páginas se reducen a alguna de esas operaciones. En un foro por ejemplo, el listado de los últimos mensajes es una operación de obtener registros y responder a un mensaje se corresponde con la opción de insertar un registro.
En muchas aplicaciones web se crean continuamente acciones y plantillas que realizan las operaciones CRUD para una determinada tabla de datos. En Symfony, el modelo contiene la información necesaria para poder generar de forma automática el código de las operaciones CRUD, de forma que se simplifica el desarrollo inicial de la aplicación y las interfaces de la parte de gestión de las aplicaciones.
Las tareas de generación de código a partir del modelo de datos crean un módulo entero, y se pueden ejecutar mediante el siguiente comando de Symfony:
> symfony <NOMBRE_TAREA> <NOMBRE_APLICACION> <NOMBRE_MODULO> <NOMBRE_CLASE>
Las tareas de generación de código son propel-init-crud, propel-generate-crud y propel-init-admin.
Durante la fase de desarrollo de una aplicación, se puede utilizar la generación de código para alguna de las siguientes tareas:
La línea de comandos de Symfony utiliza la palabra crud para referirse al "scaffolding" y admin para referirse a la parte de administración de la aplicación.
Symfony dispone de dos formas para generar el código: mediante herencia (init) o mediante la generación automática de código (generate).
Los módulos se pueden "iniciar", esto es, crear una serie de clases vacías que heredan de las del framework. Este método enmascara el código PHP de las acciones y de las plantillas para evitar que sean modificadas. Se trata de un método útil cuando la estructura de datos puede variar o cuando se necesita crear rápidamente un interfaz para el acceso a la base de datos. El código que se ejecuta durante la ejecución de la aplicación no se encuentra en la aplicación, sino en la cache. Las tareas de la línea de comandos utilizadas para este tipo de generación comienzan con propel-init-.
El código de la acción generada está vacío. Si por ejemplo se inicia un módulo llamado articulo, el código de las acciones será el siguiente:
class articuloActions extends autoarticuloActions { }
Por otra parte, también es posible generar el código completo de las acciones y plantillas para que pueda ser modificado. El módulo resultante es por tanto, independiente de las clases del framework y no es posible adaptarlo utilizando exclusivamente archivos de configuración. Las tareas de la línea de comandos utilizadas para este tipo de generación comienzan con propel-generate-.
Como el objetivo del "scaffolding" es generar la base para futuros desarrollos, es mejor generar el "scaffolding" y no solo iniciarlo. Por otra parte, la parte de administración es fácil de actualizar mediante un cambio en los archivos de configuración y sigue siendo usable aunque se modifique el modelo de datos. Esta es la razón por la que en las administraciones el código de "inicia" y no sólo se "genera".
A lo largo de este capítulo, los listados de código muestran las posibilidades de los generadores de Symfony mediante un ejemplo sencillo, similar al utilizado en el Capítulo 8. Se trata de la típica aplicación para crear un blog, que contiene las clases Article y Comment. El listado 14-1 muestra el esquema de datos y la figura 14-1 lo ilustra.
Listado 14-1 - Archivo schema.yml de la aplicación de ejemplo
propel:
blog_article:
_attributes: { phpName: Article }
id:
title: varchar(255)
content: longvarchar
created_at:
blog_comment:
_attributes: { phpName: Comment }
id:
article_id:
author: varchar(255)
content: longvarchar
created_at:
Figura 14.1. Modelo de datos de ejemplo
La generación de código no impone ninguna regla o restricción a la creación del esquema. Symfony utiliza el esquema tal y como se ha definido, interpreta sus atributos y genera el "scaffolding" o la parte de administración de la aplicación.
Para aprovechar al máximo este capítulo, deberías hacer todos los ejemplos que se incluyen. Si se realizan todos los pasos descritos en los listados de código, se obtiene un mejor conocimiento de lo que genera Symfony y de lo que se puede llegar a hacer con el código generado. La recomendación es que crees una estructura de datos como la descrita anteriormente para crear una base de datos con las tablas blog_article y blog_comment, rellenándolas con datos de prueba.
Capítulo original en inglés Chapter 14 - Generators Traducido por Javier Eguíluz