Mi primer proyecto con Symfony 1.2.7 (parte I)
Publicado en Frameworks, Programación el 21 de May de 2009 por Manel Pérez MataTags: Symfony
Después de ver que es Symfony e instalar Symfony en nuestra máquina, voy a poner los pasos que he seguido, y los problemas que me he encontrado (junto con su resolución) para crear mi primer proyecto con Symfony.
Antes de ponernos manos a la obra, es imporatante entender como estructura Symfony el código. Todo proyecto creado por Symfony consta de una serie de carpetas y archivos que contienen el código base del framework. El árbol de carpetas de un proyecto es:

A su vez, los proyectos están divididos en aplicaciones y módulos, los cuales, suelen coincidir con las tablas de nuestra base de datos. En este primer proyecto, haremos un blog muy simple y le pondremos el nombre blog (para ser original), a su vez, estará formado por dos aplicaciones, el frontend (o la parte visible para los usuarios comunes) y el backend (el panel de administración). Por último, cada una de las aplicaciones tendrá dos modulos: post y comment:

Estructura proyecto Symfony
Base de datos del proyecto
Para la base de datos de este primer proyecto, crearemos un modelo muy simple que constará de una tabla de posts y una tabla de comentarios con una relación 1:n, puesto que un post puede tener n comentarios.

Base de datos
Creando el proyecto
Una vez tenemos clara la definición de la base de datos, las aplicaciones y los módulos del proyecto, podemos empezar a dar forma a nuestro código.
- El primer paso será crear mediante el script que nos proporciona Symfony, un proyecto vacío, para ello, creamos una carpeta blog en, por ejemplo, /var/www/ y ejecutamos symfony generate:project <project>:
mkdir -p /var/www/blog/ cd /var/www/blog/ symfony generate:project blog
Esto nos habrá creado todo el árbol de directorios y archivos necesarios para poner en marcha nuestra web con este framework.
NOTA!! Dependiendo del sistema operativo y de la instalación realizada, puede ser necesario utilizar el prefijo php antes de cada comando symfony (por ejemplo: > php symfony new blog)
- Ahora, le pediremos a Symfony que nos genere las dos aplicaciones definidas anteriormente: frontend y backend
symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret frontend symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret backend
Al llamar a la tarea generate:app, también hemos pasado dos opciones relacionadas con la seguridad:
- –escaping-strategy: Permite escapar la salida para evitar ataques XSS
- –csrf-secret: Permite tokens de sesión en los formularios para prevenir los ataques CSRF
- El siguiente paso, será conectar nuestra aplicación con la base de datos, para ello, Symfony dispone de un archivo de configuración /var/www/blog/config/databases.yml en el que le indicaremos donde está localizada, a que base de datos y con que usuario y contraseña lo deberá hacer.Para este caso, daremos por hecho que la base de datos es MySQL, se encuentra en la máquina local y que estará codificada en utf8. Abrimos el archivo y modificamos los valores que pongo en negrita:
all: propel: class: sfPropelDatabase param: classname: PropelPDO dsn: mysql:dbname=DB-NAME;host=localhost username: DB-USER password: DB-PASSWORD encoding: utf8 persistent: true pooling: trueCon esto, ya tenemos configurado nuestro proyecto con la base de datos!!
- Una vez definida la conexión con la base de datos, creamos en el archivo /var/www/blog/config/schema.yml el esquema de la base de datos que representa el modelo de datos del proyecto:
propel: post: _attributes: { phpName: Post } id: title: varchar(255) excerpt: longvarchar body: longvarchar created_at: updated_at: comment: _attributes: { phpName: Comment } id: post_id: author: varchar(255) email: varchar(255) body: longvarchar created_at: updated_at:Symfony, permite insertar una serie de opciones o atributos en su esquema de la base de datos, como por ejemplo phpName, que indica el nombre de la clase PHP utilizada para manejar cada tabla, además de ser capaz de deducir información del typo de campo a partir del nombre de la columna. Si por ejemplo una columna se llama id, salvo que se le indique lo contrario, Symfony supone que es la clave primaria de la tabla y, por tanto, que es de tipo entero, que no puede tomar valores null y que su valor se autoincrementa.
Puedes ver más información sobre la syntaxis del esquema en la guía Symfony definitiva.
- Ahora que tenemos definido el esquema, ejecutamos el comando propel:build-model para generar en la carpeta /var/www/blog/lib/model las clases que se encargan de manejar la base de datos
symfony propel:build-model
NOTA!! Si en este punto, aparece un error “Could not perform XLST transformation. Make sure PHP has been compiled/configured to support XSLT.” es debido a que no tienes instalada la extensión xsl para PHP. Desde Ubuntu puedes instalarla con sudo apt-get instal php5-xsl
- Ya estamos listos para decirle a symfony que nos genere el script de creación de base de datos y lanzarlo:
symfony propel:build-sql mysql -u DB-USER -p DB-NAME < /var/www/blog/data/sql/lib.model.schema.sql
Nota!! Si antes de empezar el proyecto Symfony ya dispones de una base de datos, puedes hacer el trabajo inverso: generar el esquema y las clases PHP a partir de una base de datos existente.
- Nos vamos a nuestro navegador y visitamos la dirección http://localhost/blog/,si todo ha ido bien, deberíamos estar viendo una página similar a esta:
Nota!! Si la página te aparece sin imágenes ni estilos, bájate el archivo comprimido de Symfony Sandbox y descompríme sólo la carpeta /sf_sandbox/web/sf/ dentro de /var/www/blog/web/, con esto verás las imágenes y estilos del entorno recién creado.
Para que no me quede este post demasiado largo, lo he dividido en dos. En la segunda parte de “Mi primer proyecto con Symfony 1.2.7” veremos como dar forma a la parte pública y privada, hacer uso del scaffolding para generar las acciones comunes CRUD (Create, Read, Update, Delete) o configurar el aspecto de las URLs.














(4 votes, average: 3.75 out of 5)
May 22nd, 2009 17:15
[...] artículo es la segunda parte de mis primeros pasos con Symfony, puedes ver la primer parte de como crear un proyecto con Symfony, donde se describe paso a paso como diseñar y generar el proyecto, crear las aplicaciones y los [...]
November 7th, 2009 7:06
Hola urgente tengo un mega problema, no me crea el archivo lib.model.schema.sql
voy por el capitulo 3 y ya hice el archivo yaml sin tabulaciones y ejecute los comandos primeros sin problema pero no me marca error simplemente no me crea ese archivo para las tablas de la BD y estoy usando mysql y funciona bien el mysql.
March 15th, 2010 21:39
Me da el mismo error…..en consola no me da ningun error, pero no me genera el archivo lib.model.schema.sql que me piden chequee en todos los cursos que he visto.
Que pudiera ser eso…agradecer’ia su ayuda
June 3rd, 2010 16:09
Todo perfecto, hasta el punto 5 cuando voy a generar las clases al ejecutar “symfony propel:build-model” da como resultado = “there are no tasks defined in the propel namespace” de igual forma con el comando “symfony propel:build-sql” y pues de la misma forma al verificar en el navegador http://localhost/blog/ no encuentra nada. alguien sabe cual puede ser el error? gracias por la publicacion.
December 25th, 2010 17:05
MISMO PROBLEMA que Gabriel! una lastima…..el tutorial es EXCELENTE
Será que autor puede darnos luz al asunto ? 10^12 gracias
December 25th, 2010 17:44
SOLVED AT http://www.forosdelweb.com/f91/symfont-1-4-doctrine-decesperado-788273/
Por defecto SF 1.04 viene con DOCTRINE como ORM por default