Symfony es capaz de generar módulos más avanzados para la parte de gestión o administración de las aplicaciones, también basados en las definiciones de las clases del modelo del archivo schema.yml
. Se puede crear toda la parte de administración de la aplicación mediante módulos generados automáticamente. Los ejemplos de esta sección describen los módulos de administración creados para una aplicación llamada backend
. El esqueleto de la aplicación se puede crear mediante la tarea init-app
de Symfony:
> symfony init-app backend
Los módulos de administración interpretan el modelo con la ayuda de un archivo de configuración especial llamado generator.yml
, que se puede modificar para extender los componentes generados automáticamente y para controlar el aspecto visual de los módulos. Este tipo de módulos también disponen de los mecanismos habituales descritos en los capítulos anteriores (layout, validación, enrutamiento, configuración propia, carga automática de clases, etc.). Incluso es posible redefinir las acciones y plantillas generadas para incluir características propias, aunque el archivo generator.yml
es suficiente para realizar la mayoría de modificaciones, por lo que el código PHP solamente es necesario para las tareas muy específicas.
14.3.1. Iniciando un módulo de administración
Symfony permite crear la parte de administración de una aplicación módulo a módulo. Los módulos se generan en base a objetos Propel mediante la tarea propel-init-admin
, que utiliza una sintaxis similar a la que se utiliza para iniciar un scaffolding:
> symfony propel-init-admin backend article Article
Este comando es suficiente para crear un módulo llamado article
en la aplicación backend
y basado en la definición de la clase Article
, que además es accesible desde la dirección:
http://localhost/backend.php/article
El aspecto visual de los módulos generados automáticamente, que se muestra en las figuras 14-5 y 14-6, es suficiente para incluirlo tal cual en una aplicación comercial.
Las diferencias entre la interfaz de un scaffolding y la de una administración generada automáticamente pueden parecer insignificantes, pero las posibilidades de configuración de la administración permiten mejorar el aspecto por defecto con muchas características para las que no es necesario escribir ni una sola línea de código PHP.
Nota Los módulos de una administración solamente pueden ser iniciados y nunca generados.
14.3.2. Un vistazo al código generado
El código del módulo de administración module
, que se encuentra en el directorio apps/backend/modules/article/
, está completamente vacío porque solo ha sido iniciado. La mejor forma de comprobar el código generado para este módulo es acceder con el navegador a sus páginas y después comprobar los contenidos de la carpeta cache/
. El listado 14-4 muestra todas las acciones y plantillas generadas que se encuentran en la cache.
Listado 14-4 - Elementos de administración generados automáticamente, en cache/backend/ENV/modules/article/
// En actions/actions.class.php create // Redirige a "edit" delete // Borra una fila edit // Muestra un formulario para modificar la columnas de una fila // y procesa el envío del formulario index // Redirige a "list" list // Muestra un listado de todas las filas de la tabla save // Redirige a "edit" // En templates/ _edit_actions.php _edit_footer.php _edit_form.php _edit_header.php _edit_messages.php _filters.php _list.php _list_actions.php _list_footer.php _list_header.php _list_messages.php _list_td_actions.php _list_td_stacked.php _list_td_tabular.php _list_th_stacked.php _list_th_tabular.php editSuccess.php listSuccess.php
Los módulos de administración generados automáticamente se componen básicamente de las vistas edit
y list
. Si se observa el código PHP, se encontrará un código muy modular, fácil de leer y extensible.
14.3.3. Conceptos básicos del archivo de configuración generator.yml
La principal diferencia entre el scaffolding y la parte de administración de la aplicación (además de que los módulos de una administración no disponen de la acción show
) es que la administración se basa en las opciones del archivo de configuración generator.yml
. Las opciones de configuración por defecto para un módulo de administración recién creado llamado article
se pueden ver en el archivo backend/modules/article/config/generator.yml
, reproducido en el listado 14-5.
Listado 14-5 - Configuración por defecto para la generación de la administración, en backend/modules/article/config/generator.yml
generator:
class: sfPropelAdminGenerator
param:
model_class: Article
theme: default
Esta configuración es suficiente para generar una administración básica. Todas las opciones propias se añaden bajo la clave param
, después de la línea theme
(lo que significa que todas las líneas que se añadan al final del archivo generator.yml
tienen que empezar al menos por 4 espacios en blanco, para que estén correctamente indentadas). El listado 14-6 muestra un archivo generator.yml
típico.
Listado 14-6 - Configuración completa típica para el generador
generator:
class: sfPropelAdminGenerator
param:
model_class: Article
theme: default
fields:
author_id: { name: Article author }
list:
title: List of all articles
display: [title, author_id, category_id]
fields:
published_on: { params: date_format='dd/MM/yy' }
layout: stacked
params: |
%%is_published%%<strong>%%=title%%</strong><br /><em>by %%author%%
in %%category%% (%%published_on%%)</em><p>%%content_summary%%</p>
filters: [title, category_id, author_id, is_published]
max_per_page: 2
edit:
title: Editing article "%%title%%"
display:
"Post": [title, category_id, content]
"Workflow": [author_id, is_published, created_on]
fields:
category_id: { params: disabled=true }
is_published: { type: plain}
created_on: { type: plain, params: date_format='dd/MM/yy' }
author_id: { params: size=5 include_custom=>> Choose an author << }
published_on: { credentials: }
content: { params: rich=true tinymce_options=height:150 }
Las siguientes secciones explican en detalle todas las opciones que se pueden utilizar en este archivo de configuración.