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.