Ver índice de contenidos del libro

1.8. Preparar el proyecto

En Symfony, las aplicaciones que comparten el mismo modelo de datos se agrupan en proyectos. El proyecto Jobeet dispone de dos aplicaciones diferentes: un frontend y un backend.

1.8.1. Crear el proyecto

Dentro del directorio jobeet, ejecuta la tarea generate:project para crear la estructura de directorios del proyecto:

$ php lib/vendor/symfony/data/bin/symfony generate:project jobeet

En Windows:

c:\> php lib\vendor\symfony\data\bin\symfony generate:project jobeet

La tarea generate:project genera la estructura de directorios y archivos por defecto necesarios para un proyecto Symfony:

Directorio Descripción
apps/ Se encuentran los archivos y directorios de las aplicaciones
cache/ Los archivos que el framework guarda en la cache
config/ Los archivos de configuración del proyecto
lib/ Las librerías y clases del proyecto
log/ Los archivos de log del framework
plugins/ Los plugins instalados
test/ Los archivos de las pruebas unitarias y funcionales
web/ El directorio web raíz

Nota ¿Por qué Symfony genera tantos archivos? Una de las principales ventajas de utilizar un framework completo es que puedes estandarizar tus desarrollos. Gracias a la estructura de archivos y directorios por defecto de Symfony, cualquier programador con ciertos conocimientos de Symfony es capaz de continuar el desarrollo de cualquier proyecto Symfony. En cuestión de minutos será capaz de profundizar en el código, solucionar errores y añadir nuevas características.

La tarea generate:project también genera un atajo para el comando symfony dentro del directorio raíz del proyecto Jobeet para reducir la longitud de los comandos que tienes que escribir al ejecutar una tarea de Symfony.

Por tanto, a partir de este momento ya no vamos a utilizar la ruta completa hasta el comando symfony, sino que se utilizará directamente el atajo symfony.

1.8.2. Crear la aplicación

Ahora ya puedes crear la aplicación frontend ejecutando la tarea generate:app:

$ php symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret frontend

Nota Como el archivo symfony es ejecutable, los usuarios de Unix pueden utilizar ./symfony en vez de php symfony. Si utilizas Windows, copia el archivo symfony.bat en tu proyecto y utiliza el comando symfony en vez de php symfony:

c:\> copy lib\vendor\symfony\data\bin\symfony.bat .

En función del nombre de la aplicación indicado como argumento, la tarea generate:app crea en el directorio apps/frontend la estructura de directorios por defecto que necesita la aplicación:

Directorio Descripción
config/ Los archivos de configuración de la aplicación
lib/ Las librerías y clases de la aplicación
modules/ El código de la aplicación (MVC)
templates/ Los archivos de las plantillas globales

Nota Todos los comandos de symfony se deben ejecutar en el directorio raíz del proyecto salvo que se indique lo contrario de forma explícita.

Cuando se ejecuta la tarea generate:app, se han incluido dos opciones relacionadas con la seguridad:

  • --escaping-strategy: activa el mecanismo de escape para evitar ataques de tipo XSS Cross Site Scripting).
  • --csrf-secret: activa los tokens de sesión en los formularios para evitar ataques de tipo CSRF Cross Site Request Forgery).

Utilizando estos dos argumentos opcionales en la tarea generate:app, hemos añadido la seguridad necesaria para contrarrestar las dos vulnerabilidades más extendidas en la web. En efecto, Symfony se encarga de proteger automáticamente nuestra aplicación frente a estos tipos de ataque.

Nota Si desconoces los ataques de tipo XSS o CSRF, puede ser interesante que dediques un tiempo a estudiar el funcionamiento de estas vulnerabilidades.

1.8.3. La ruta de Symfony

Para obtener la versión de Symfony que utiliza tu proyecto, puedes utilizar el siguiente comando:

$ php symfony -V

La opción -V también muestra la ruta completa hasta el directorio de instalación de Symfony, que se encuentra en el archivo de configuración config/ProjectConfiguration.class.php:

// config/ProjectConfiguration.class.php
require_once '/Users/fabien/work/symfony/dev/1.2/lib/autoload/sfCoreAutoload.class.php';

Para que el proyecto sea más portable, es recomendable cambiar la ruta absoluta por una ruta relativa:

// config/ProjectConfiguration.class.php
require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';

De esta forma, ahora puedes colocar el directorio del proyecto Jobeet en cualquier otro directorio del servidor y todo seguirá funcionando correctamente.