Antes que nada, 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:
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.
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 CSR
- 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: true
Con 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.
- 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:
No hay comentarios:
Publicar un comentario