Symfony 1.0, la guía definitiva

14.3. Creando la parte de administración de las aplicaciones

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.

Vista "list" del módulo "article" en la aplicación "backend"

Figura 14.5 Vista "list" del módulo "article" en la aplicación "backend"

Vista "edit" del módulo "article" en la aplicación "backend"

Figura 14.6 Vista "edit" del módulo "article" en la aplicación "backend"

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.