Proporciona varias herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicación web compleja. Además, automatiza las tareas más comunes, permitiendo al desarrollador dedicarse por completo a los aspectos específicos de cada aplicación. El resultado de todas estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicación web.
Inicialización del directorio del proyecto
Antes de instalar symfony, es necesario crear el directorio que contendrá todos los ficheros relacionados con el proyecto. Para el ejemplo que nos ocupa, dispondremos de un contenedor global de proyectos en
/home/sfprojects/
y, en su interior, colocaremos una carpeta diferente para cada proyecto que vayamos a crear (en este tutorial, nuestro proyecto se llamará proyecto
):$ sudo mkdir -p /home/sfprojects/proyecto $ sudo chown -R username.username /home/sfproject/proyecto $ cd /home/sfproject/proyectoElección de la versión de Symfony
En el momento de escribir este artículo, symfony tiene dos ramas estables del framework: la 1.4.17 y la 2.0.0. En este tutorial asumimos que se desea instalar symfony 1.4.
Se puede instalar symfony a nivel global en el servidor o incrustarlo en cada uno de los proyectos. Esta segunda opción es la preferida porque nos permitirá que los proyectos sean totalmente independientes unos de otros.
La actualización del framework instalado localmente en un proyecto no romperá ninguno de los otros proyectos de forma inesperada. Esto significa que se pueden tener proyectos en diferentes versiones de Symfony, y actualizarlos cada uno a la vez que mejor convenga.
Siguiendo la práctica recomendada, instalaremos los archivos de symfony en el directorio
lib/vendor
. Así pues, en primer lugar, vamos a crear ese directorio dentro de la estructura del proyecto:$ mkdir -p lib/vendorInstalando Symfony
La forma más fácil de instalar symfony es descargándose el archivo desde la página web oficial del proyecto. Tenemos disponibles para la descarga las versiones en formatos
.tgz
y .zip
.Descargamos el archivo (en nuestro caso, la versión .tgz) y lo colocamos en el directorio recién creado
proyecto/lib/vendor
, lo descomprimimos, y le cambiamos el nombre a symphony:$ cd lib/vendor $ wget http://www.symfony-project.org/get/symfony-1.4.17.tgz $ tar zxpf symfony-1.4.17.tgz $ mv symfony-1.4.17.tgz symfony $ rm symfony-1.4.17.tgzCreación del proyecto
Nos situamos en el directorio
proyecto/
y, para crear el proyecto symfony, ejecutaremos la tarea generate:project
:$ cd ../.. $ php lib/vendor/symfony/data/bin/symfony generate:project proyectoLa tarea
generate:project
genera la estructura predeterminada de directorios y archivos necesarios para un proyecto symfony:Directorio | Descripción |
apps/ | Contiene todas las aplicaciones del proyecto |
cache/ | Los archivos almacenados en caché por el framework |
config/ | Los archivos de configuración del proyecto |
data/ | Los archivos de datos como los accesorios iniciales |
lib/ | Las bibliotecas y clases del proyecto |
log/ | Los archivos de registro del framework |
plugins/ | Los plugins instalados |
test/ | La unidad y los archivos de prueba funcional |
web/ | El directorio raíz web (véase más adelante) |
¿Por qué Symfony genera tantos archivos?
Uno de los principales beneficios de usar un framework completo es la normalización de los desarrollos. Gracias a la estructura de archivos y directorios por defecto de Symfony, cualquier desarrollador con algunos conocimientos de Symfony puede asumir el mantenimiento de un proyecto. En cuestión de minutos, será capaz de bucear en el código, corregir errores y añadir nuevas funcionalidades.
Uno de los principales beneficios de usar un framework completo es la normalización de los desarrollos. Gracias a la estructura de archivos y directorios por defecto de Symfony, cualquier desarrollador con algunos conocimientos de Symfony puede asumir el mantenimiento de un proyecto. En cuestión de minutos, será capaz de bucear en el código, corregir errores y añadir nuevas funcionalidades.
La tarea
generate:project
también crea, en el directorio raíz del proyecto, un acceso directo hacia symfony
para acortar el número de caracteres a escribir cuando se ejecuta una tarea. Por lo tanto, a partir de ahora, en lugar de utilizar la ruta completa al programa de Symfony (proyecto/lib/vendor/symfony/data/bin/symfony
), podemos utilizar el acceso directo de symfony
.Verificación de la instalación
Ahora que Symfony está instalado, desde el directorio
proyecto/
, comprobaremos que todo funciona correctamente. Para ello, utilizaremos la línea de comandos de symfony
para que nos muestre la versión instalada (notar el uso de la V mayúscula):$ php symfony -V
symfony version 1.4.17 (/home/sfprojects/proyecto/lib/vendor/symfony/lib)
La opción -V
también muestra la ruta al directorio de instalación de Symfony, que se almacena en config/ProjectConfiguration.class.php
. Si en el fichero de configuración muestra una ruta absoluta hacia Symfony (siguiendo las instrucciones al pie de la letra, no debería serlo), con el fin de obtener una mejor portabilidad, la cambiaremos por lo que se sigue:// config/ProjectConfiguration.class.php require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';De este modo, podremos mover el directorio del proyecto a cualquier otra parte del servidor y seguirá funcionando igual.
Configurando la base de datos
Al crear un nuevo proyecto, se activa por defecto Doctrine. Configurar la base de datos utilizada por Doctrine es tan sencillo como llamar la tarea
configure:database
:$ php symfony configure:database "mysql:host=localhost;dbname=dbname" dbuser dbpasswordCreación de la aplicación
Ahora vamos a crear el frontend de la aplicación ejecutando la tarea
generate:app
.$ php symfony generate:app frontend
Debido a que el acceso directo a symfony es ejecutable, de ahora en adelante, se pueden reemplazar todas las apariciones de
«php symfony»
por «./symfony»
.Basado en el nombre de la aplicación dada como argumento, la tarea
generate:app
crea la estructura de directorios predeterminada necesaria para la aplicación dentro del directorio apps/frontend/
:Directorio | Descripción |
config/ | Los archivos de configuración de la aplicación |
lib/ | Las bibliotecas de aplicaciones y clases |
modules/ | El código de la aplicación (MVC) |
templates/ | Los archivos de plantillas globales |
Seguridad
De forma predeterminada, la tarea
Para evitar ataques XSS, se ha activado el mecanismo de escape de caracteres, y para prevenir los ataques CSRF, se habilita la generación de tokens.
Por supuesto, se puede ajustar la configuración de estos parametros, mediante las opciones:
En caso de no saber nada acerca de XSS y CSRF, es recomendable que se tome un tiempo para aprender más de estas vulnerabilidades de seguridad.
De forma predeterminada, la tarea
generate:aplication
fortifica nuestra aplicación para prevenirla de las dos vulnerabilidades más extendidas en la web: XSS y CSRF.Para evitar ataques XSS, se ha activado el mecanismo de escape de caracteres, y para prevenir los ataques CSRF, se habilita la generación de tokens.
Por supuesto, se puede ajustar la configuración de estos parametros, mediante las opciones:
--escaping-strategy
: Activa o desactiva el mecanismo de escape de caracteres--csrf-secret
: Permite tokens de sesión en los formulariosEn caso de no saber nada acerca de XSS y CSRF, es recomendable que se tome un tiempo para aprender más de estas vulnerabilidades de seguridad.
Permisos de la estructura de directorios
Antes de intentar acceder a un proyecto de nueva creación, es necesario establecer los permisos de escritura en los directorios
cache/
y log/
a los niveles apropiados, de modo que el servidor web pueda escribir en ellos:$ chmod 777 cache/ log/Configuración del servidor web
Una buena práctica es poner bajo el directorio raíz web únicamente los archivos que necesiten tener acceso desde el exterior mediante un navegador web, como las hojas de estilo, el código JavaScript y las imágenes. Por defecto, se recomienda almacenar estos archivos en el subdirectorio
web/
del proyecto symfony.Si echamos un vistazo a este directorio, nos encontraremos algunos subdirectorios (
css/
, images/
, js/
y uploads/
) y los archivos de los controladores del frontend (index.php
y frontend_dev.php
). Estos son los únicos archivos PHP que necesitan estar bajo el directorio raíz de la web. Todos los demás archivos se pueden ocultar al navegador, lo cual es una buena idea en cuanto a seguridad se refiere.Configuración del apache
Ahora es el momento de cambiar la configuración de Apache para que el nuevo proyecto sea accesible a través de la web. Editaremos el fichero de configuración
httpd.conf
para añadirle la siguiente configuración:# Debemos asegurarnos de que esta línea exista una sola vez en nuestra configuración NameVirtualHost 127.0.0.1:8080 # Esta es la configuración de nuestro proyecto Listen 127.0.0.1:8080 <VirtualHost 127.0.0.1:8080> DocumentRoot "/home/sfprojects/proyecto/web" DirectoryIndex index.php <Directory "/home/sfprojects/proyecto/web"> AllowOverride All Allow from All </Directory> Alias /sf /home/sfprojects/proyecto/lib/vendor/symfony/data/web/sf <Directory "/home/sfprojects/proyecto/lib/vendor/symfony/data/web/sf"> AllowOverride All Allow from All </Directory> ErrorLog "/var/log/apache2/proyecto-error_log" CustomLog "/var/log/apache2/proyecto-access_log" common </VirtualHost>
El Alias
/sf
permite el acceso a las imágenes y los archivos JavaScript necesarios para mostrar adecuadamente las páginas symfony por defecto y, también, la barra de herramientas de depuración web.La configuración indicada hace que Apache escuche peticiones web por el puerto 8080 del servidor. De este modo, el sitio será accesible a través de la siguiente URL:
http://localhost:8080/Se puede cambiar 8080 por cualquier otro número. En favor de los números de puerto superiores a 1024 como éste, hay que decir que no requieren de derechos de administrador.
Configuración de un nombre de dominio dedicado
Si somos administradores del equipo, lo mejor será configurar un VirtualHost en lugar de añadir un nuevo puerto cada vez que se inicia un proyecto.
Así pues, en vez de elegir un puerto y agregarle la correspondiente declaración
Si somos administradores del equipo, lo mejor será configurar un VirtualHost en lugar de añadir un nuevo puerto cada vez que se inicia un proyecto.
Así pues, en vez de elegir un puerto y agregarle la correspondiente declaración
Listen
, elegiremos un nombre que identifique el proyecto (con el sufijo .localhost
para distinguirlo de un dominio de Internet real) y añadimos una declaración ServerName
:# Esta es la configuración de nuestro proyecto <VirtualHost *:80> ServerName proyecto.localhost DocumentRoot "/home/sfprojects/proyecto/web" DirectoryIndex index.php <Directory "/home/sfprojects/proyecto/web"> AllowOverride All Allow from All </Directory> Alias /sf /home/sfprojects/proyecto/lib/vendor/symfony/data/web/sf <Directory "/home/sfprojects/proyecto/lib/vendor/symfony/data/web/sf"> AllowOverride All Allow from All </Directory> ErrorLog "/var/log/apache2/proyecto-error_log" CustomLog "/var/log/apache2/proyecto-access_log" common </VirtualHost>Para poder utilizar este nombre de dominio (
proyecto.localhost
) tendremos que declararlo localmente en el fichero /etc/hosts
añadiéndole la siguiente línea:127.0.0.1 proyecto.localhost
Comprobando la nueva configuración
Reiniciamos Apache, y verificamos que tenemos acceso a la aplicación escribiendo en el navegador
http://localhost:8080/index.php
o http://proyecto.localhost/index.php
(dependiendo de la configuración elegida en el apartado anterior). Si todo ha ido correctamente, visualizaremos una página como esta:
Si Apache tiene instalado el módulo
mod_rewrite
no es necesario escribir index.php
en la URL. Esto es posible gracias a las reglas de reescritura configuradas en el fichero web/.htaccess
.Podemos acceder al entorno de desarrollo (en otro documento hablaremos de los entornos) de la aplicación escribiendo la siguiente URL en el navegador:
http://proyecto.localhost/frontend_dev.phpLa barra de debug web debería mostrarse en la esquina superior derecha, incluidos los iconos. La prueba de que la configuración del alias
sf/
es correcta.
En este punto, Symfony 1.4.17 ya está instalado y es completamente operativo.
Relacionado
Para saber más
Fuentes
Para saber más
Fuentes
0 comentarios:
Publicar un comentario