Aunque ya hemos creado la base de datos, todas sus tablas están vacías. En cualquier aplicación web siempre existen tres tipos de datos:
- Datos iniciales: son los datos que necesita la aplicación para funcionar. Jobeet por ejemplo necesita el nombre de algunas categorías y también es necesario al menos un usuario de tipo
admin
para poder acceder a la aplicaciónbackend
. - Datos de prueba: son los datos necesarios para probar la aplicación. Los buenos programadores crean pruebas unitarias para asegurar que la aplicación se comporta tal y como se describe en los escenarios. La mejor forma de probar la aplicación consiste en realizar pruebas unitarias automáticas. Cada vez que se ejecutan las pruebas unitarias es necesario disponer de datos de prueba en la base de datos.
- Datos de usuarios: son los datos reales creados por los usuarios que utilizan la aplicación.
Cada vez que Symfony genera las tablas de la base de datos, se elimina toda la información existente. Para insertar de nuevo los datos iniciales podríamos utilizar un script de PHP o podríamos ejecutar directamente unas sentencias SQL con el comando mysql
. No obstante, como se trata de una necesidad bastante habitual, Symfony ofrece una alternativa mucho mejor: crear archivos en formato YAML, guardarlos en el directorio data/fixtures/
y utilizar la tarea propel:data-load
para cargarlos automáticamente en la base de datos:
En primer lugar, crea los siguientes archivos de datos en formato YAML:
# data/fixtures/010_categories.yml
JobeetCategory:
design: { name: Design }
programming: { name: Programming }
manager: { name: Manager }
administrator: { name: Administrator }
# data/fixtures/020_jobs.yml
JobeetJob:
job_sensio_labs:
category_id: programming
type: full-time
company: Sensio Labs
logo: sensio-labs.gif
url: http://www.sensiolabs.com/
position: Web Developer
location: Paris, France
description: |
You have already developed websites with symfony and you want
to work with Open-Source technologies. You have a minimum of
3 years experience in web development with PHP or Java and
you wish to participate to development of Web 2.0 sites using
the best frameworks available.
how_to_apply: |
Send your resume to fabien.potencier [at] sensio.com
is_public: true
is_activated: true
token: job_sensio_labs
email: [email protected]
expires_at: 2010-10-10
job_extreme_sensio:
category_id: design
type: part-time
company: Extreme Sensio
logo: extreme-sensio.gif
url: http://www.extreme-sensio.com/
position: Web Designer
location: Paris, France
description: |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
in reprehenderit in.
Voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est laborum.
how_to_apply: |
Send your resume to fabien.potencier [at] sensio.com
is_public: true
is_activated: true
token: job_extreme_sensio
email: [email protected]
expires_at: 2010-10-10
Nota El archivo de datos de las ofertas de trabajo hace referencia a dos imágenes. Puedes descargarlas desde el sitio web de Symfony y colocarlas en el directorio web/uploads/jobs/
: http://www.symfony-project.org/get/jobeet/sensio-labs.gif y http://www.symfony-project.org/get/jobeet/extreme-sensio.gif
Un archivo de datos fixtures file) es un archivo escrito en formato YAML que define los objetos del modelo y los etiqueta con un nombre único (en el ejemplo anterior hemos creado dos ofertas de trabajo etiquetadas job_sensio_labs
y job_extreme_sensio
). Este nombre es imprescindible para relacionar objetos entre sí sin tener que definir claves primarias (que normalmente son valores que se auto-incrementan y por tanto, no se pueden establecer). En los archivos anteriores, la categoría de la oferta de trabajo job_sensio_labs
es programming
, que es el nombre único que le hemos dado a la categoría Programming
.
Nota En los archivos YAML, cuando una cadena de texto contiene saltos de línea (como por ejemplo la columna description
del archivo de datos de las ofertas de trabajo) puedes utilizar el símbolo |
para indicar que la cadena de texto ocupa varias líneas.
Aunque los archivos de datos pueden contener objetos de uno o varios modelos diferentes, en los archivos de datos de Jobeet hemos decidido crear un archivo para cada modelo.
Nota Si te has fijado atentamente, habrás visto que los nombres de los archivos de datos incluyen un prefijo numérico. Aunque puedes utilizar los nombres que quieras, prefijar cada archivo con un número es una de las formas más sencillas de controlar el orden en el que se cargan los archivos de datos. Además, es una buena idea no utilizar números consecutivos por si más adelante tenemos que crear nuevos archivos de datos que se tienen que cargar entre medio de dos archivos ya existentes.
En los archivos de datos no es obligatorio establecer el valor de todas las columnas. Si no se indica el valor de una columna, Symfony le asigna el valor por defecto establecido en el esquema de la base de datos. Además, como Symfony utiliza Propel para cargar los datos, funcionan todas las características avanzadas (como establecer automáticamente el valor de las columnas created_at
y updated_at
) y todos los comportamientos que hayas definido en las clases del modelo.
Una vez creados los archivos de datos, cargarlos en la base de datos es tan sencillo como ejecutar la tarea propel:data-load
:
$ php symfony propel:data-load
Nota La tarea propel:build-all-load
es equivalente a ejecutar la tarea propel:build-all
seguida de la tarea propel:data-load