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:
admin para poder acceder a la aplicación backend. 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: job@example.com 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: job@example.com expires_at: 2010-10-10
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.
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.
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
La tarea propel:build-all-load es equivalente a ejecutar la tarea propel:build-all seguida de la tarea propel:data-load
válido para Symfony 1.2