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.
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 |
¿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.
Ahora ya puedes crear la aplicación frontend ejecutando la tarea generate:app:
$ php symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret frontend
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 |
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.
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.
válido para Symfony 1.2