En Symfony, las aplicaciones que comparten el mismo modelo de datos se agrupan en proyectos. Normalmente, los proyectos tienen como mínimo dos aplicaciones: frontend
(encargada de la parte pública del sitio) y backend
(que es la parte de administración).
3.3.1. Crear el Proyecto
Accede al directorio en el que has creado el directorio del proyecto (en los ejemplos anteriores es el directorio sfproject
) y ejecuta la tarea generate_project
para crear tu primer proyecto Symfony:
$ php lib/vendor/symfony/data/bin/symfony generate:project NOMBRE_PROYECTO
Si usas Windows:
c:\> php lib\vendor\symfony\data\bin\symfony generate:project NOMBRE_PROYECTO
La tarea generate:project
genera toda la estructura de archivos y directorios que forman un proyecto Symfony.
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 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 crea un script llamado symfony
en el directorio raíz del proyecto. Este script es en realidad un atajo que permite ejecutar comandos Symfony escribiendo muchos menos caracteres.
Así que a partir de ahora, en vez de escribir php lib\vendor\symfony\data\bin\symfony
para ejecutar comandos Symfony, puedes escribir simplemente php symfony
.
3.3.2. Configurar la base de datos
Symfony es compatible con cualquier base de datos que soporte PDO, entre otras, MySQL, PostgreSQL, SQLite, Oracle, MSSQL, etc. Además de PDO, Symfony incluye dos herramientas de tipo ORM: Propel y Doctrine.
Cuando creas un proyecto nuevo, por defecto se activa Doctrine. Para configurar la conexión con la base de datos, utiliza la tarea configure:database
:
$ php symfony configure:database "mysql:host=localhost;dbname=dbname" root mi_password
La tarea configure:database
requiere tres argumentos: el DSN de PDO, el nombre de usuario y la contraseña para acceder a la base de datos. Si no utilizas contraseña de acceso, simplemente no añadas este tercer argumento.
Nota Si prefieres utilizar Propel en vez de Doctrine, añade la opción --orm=Propel
al crear el proyecto con la tarea generate:project
. Si no quieres utilizar ningún ORM, simplemente añade la opción --orm=none
.
3.3.3. Crear la aplicación
A continuación, crea la aplicación frontend
con la tarea generate:app
:
$ php symfony generate:app frontend
Nota Como el atajo symfony
utilizado para ejecutar las tareas es un archivo ejecutable, si tu sistema operativo es de tipo Unix, puedes reemplazar todos los comandos php symfony
por ./symfony
a partir de ahora.
Si utilizas Windows, puedes copiar el archivo symfony.bat
a tu proyecto para ejecutar symfony
en vez de php symfony
:
c:\> copy lib\vendor\symfony\data\bin\symfony.bat .
A partir del nombre de aplicación indicado como argumento, la tarea generate:app
crea la estructura inicial de directorios que necesitan las aplicaciones Symfony. Siguiendo con el ejemplo anterior, esta estructura se crea dentro del directorio apps/frontend/
.
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, .
3.3.4. Permisos de los directorios
Antes de poder utilizar tu proyecto, es necesario que establezcas los permisos de escritura adecuados en los directorios cache/
y log/
. La siguiente tarea hace que tanto el servidor web como la herramienta de la línea de comandos puedan escribir en ellos:
$ symfony project:permissions