Symfony 1.4, la guía definitiva

14.1. Generación de código en función del modelo

En las aplicaciones web, las operaciones de acceso a los datos se pueden clasificar en una de las siguientes categorías:

  • Insertar un registro creation, en inglés)
  • Obtener registros retrieval, en inglés)
  • Modificar un registro o alguna de sus columnas update, en inglés)
  • Borrar un registro deletion, en inglés)

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 parte de administración de las aplicaciones.

14.1.1. Modelo de datos de ejemplo

A lo largo de este capítulo, los listados de código muestran las posibilidades del generador de administraciones 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 BlogArticulo y BlogComentario. El listado 14-1 muestra el esquema de datos y la figura 14-1 lo ilustra.

Listado 14-1 - Archivo schema.yml de Propel para la aplicación de ejemplo

propel:
  blog_categoria:
    id:                ~
    nombre:            varchar(255)
  blog_autor:
    id:                ~
    nombre:            varchar(255)
  blog_articulo:
    id:                ~
    titulo:            varchar(255)
    contenido:         longvarchar
    blog_autor_id:     ~
    blog_categoria_id: ~
    publicado:         boolean
    created_at:        ~
  blog_comentario:
    id:                ~
    blog_articulo_id:  ~
    autor:             varchar(255)
    contenido:         longvarchar
    created_at:        ~
Modelo de datos de ejemplo

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 la parte de administración de la aplicación.

Nota 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. Para ello, utiliza el schema.yml anterior y genera todas las clases necesarias con la tarea propel:build:

$ php symfony propel:build --all --no-confirmation

La interfaz del generador de administración necesita algunos métodos mágicos de PHP para hacer su trabajo, por lo que debes añadir un método __toString() en cada clase de tu modelo.

class BlogAutor extends BaseBlogAutor
{
  public function __toString()
  {
    return $this->getNombre();
  }
}

class BlogCategoria extends BaseBlogCategoria
{
  public function __toString()
  {
    return $this->getNombre();
  }
}

class BlogArticulo extends BaseBlogArticulo
{
  public function __toString()
  {
    return $this->getTitulo();
  }
}