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.
En su momento vimos como realizar la instalación de symfony para Ubuntu. Hoy vamos a ver como realizar la instalación para Mac OS X
Requisitos previos
Antes de iniciar todo el proceso, debemos asegurarnos de tener en marcha una arquitectura MAMP (Mac-Apache-Mysql-PHP) en nuestro equipo.
Nota: Si el sistema MAMP ya está instalado, se puede saltar directamente al proceso de instalación de symfony.
Existen herramientas como apachefriends ó MAMP que instalan todo lo necesario de una forma cómoda y sin complicaciones. En este tutorial, en cambio, vamos a aprovechar, las versiones de Apache y PHP que ya vienen instaladas en Mac OS X Lion e instalaremos manualmente mySQL.
Apache
A diferencia de lo que pasa en Windows, Mac OS ya trae instalado el servidor Apache. Simplemente hay que activarlo. Para ello iremos a las «Preferencias del sistema», seleccionaremos el icono «Compartir» y marcaremos la opción «Compartir Web». Una vez activado el servicio, podemos comprobar el funcionamiento del servidor Apache escribiendo
http://localhost en la barra de direcciones del navegador. Se mostrará una página básica que nos indicará que funciona correctamente.
Por defecto, la raíz de los documentos de la página web (ficheros HTML, PHP, imágenes, etc.) se encuentra en el directorio
/Library/Webserver/Documents.PHP
Una vez activado Apache, para que éste pueda cargar el módulo PHP, bastará con editar el fichero de configuración del servicio
/etc/apache2/httpd.conf y descomentar la línea donde se carga el múdulo de PHP (descomentar LoadModule php5_module)$ sudo vim /etc/apache2/httpd.conf
## Descomentamos (eliminamos el # inicial) la siguiente línea:
LoadModule php5_module libexec/apache2/libphp5.soA continuación, hacemos una copia del fichero de configuración por defecto del PHP y lo editamos:$ sudo cp /etc/php.ini.default /etc/php.ini
$ sudo vim /etc/php.ini
## Cambiamos el tamaño máximo de subida de ficheros hasta 30M:
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 30M
## Fijamos la zona horaria correspondiente:
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Europe/Madrid"Para que todos estos cambios tengan efecto, hay que reiniciar el servicio de Apache$ sudo apachectl restartPara comprobar el correcto funcionamiento del PHP dentro de Apache, crearemos una página en PHP con una llamada a
phpinfo() en la raíz de la web y la visualizaremos en el navegador:$ sudo vim /Library/WebServer/Documents/info.php
<?php phpinfo(); ?>Cargando esta página en el navegador podremos comprobar el correcto funcionamiento de PHP:
mySQL
A diferencia de Apache y PHP que, como ya hemos visto, sí vienen con el sistema y solo hay que activarlos, mySQL no viene viene incorporado (Mac OS X Lion incluye el soporte a postgreSQL).
Para poder instalarlo, deberemos descargarlo desde Download MySQL Community Server. En nuestro caso, elegimos «Mac OS X ver. 10.6 (x86, 64-bit), DMG Archive». Para realizar la descarga, no es preciso registrarse, basta con hacer click en «No thanks, just start my download!».
Una vez abierto el paquete DMG que nos acabamos de descargar, tenemos un ventana como esta:

- Mysql-5.5.15-osx10.6-x86_64.pkg
- MySQL.prefPane
- MySQLStartupItem.pkg
root para mySQL está en blanco, lo cual es un potencial agujero de seguridad. Para ello, habrá que proceder a cambiar la contraseña siguiendo las indicaciones de "Cambiar la contraseña root de mySQL".Para trabajar desde la cónsola de una forma más eficaz, nos puede interesar añadir el directorio donde se encuentran los ejecutables de mySQL dentro de la variable
PATH del sistema. Para ello, editaremos el archivo .bash_profile dentro de nuestra carpeta personal y añadiremos la siguiente línea:$ vim ~/.bash_profile
export PATH="/usr/local/mysql/bin:$PATH"Para terminar con la configuración de mySQL, vamos a crear el fichero my.conf. Copiaremos el fichero de ejemplo que viene con la instalación y luego lo editaremos:
$ sudo cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf $ sudo vim /etc/my.cnfDentro del apartado
[client], añadiremos al usuario root, descomentaremos la línea de password (eliminando el primer carácter #) y le indicaremos la contraseña de root de mySQL. Más abajo, en la sección [mysqld] nos aseguraremos de que la localización del socket sea la misma que la indicada por la variable pdo_mysql.default_socket del archivo de configuración /etc/php.ini (en el caso de los Mac, suele ser /tmp/mysql.sock):[client]
user = root
password = nuestra_contraseña
[mysqld]
port = 3306
socket = /tmp/mysql.sock
[...]INSTALACIÓN DE SYMFONY
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
/Users/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 /Users/sfprojects/proyecto $ sudo chown -R username /Users/sfproject/proyecto $ cd /Users/sfproject/proyecto
Elecció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.18 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/vendor
Instalando 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 $ curl http://www.symfony-project.org/get/symfony-1.4.18.tgz -o symfony-1.4.18.tgz $ tar zxpf symfony-1.4.18.tgz $ mv symfony-1.4.18.tgz symfony $ rm symfony-1.4.18.tgz
Creació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.18 (/Users/sfprojects/proyecto/lib/vendor/symfony/lib)La opción -V (en mayúscula) 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 dbpassword
Creació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 |
i18n/ | Los archivos para la internacionalización y localizació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 asegurarse de que se han establecido de forma correcta los permisos de escritura para los directorios
cache/ y log/, 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
/etc/apache2/httpd.conf para habilitar la carga de los VirtualHost.## Descomentamos la línea que incluye la configuración de los Virtual hosts Include /private/etc/apache2/extra/httpd-vhosts.confA continuación, editamos el fichero de definición de los Virtual Host:
$ sudo vim /etc/apache2/extra/httpd-vhosts.conf
# 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 "/Users/sfprojects/proyecto/web"
DirectoryIndex index.php
<Directory "/Users/sfprojects/proyecto/web">
AllowOverride All
Allow from All
</Directory>
Alias /sf /Users/sfprojects/proyecto/lib/vendor/symfony/data/web/sf
<Directory "/Users/sfprojects/proyecto/lib/vendor/symfony/data/web/sf">
AllowOverride All
Allow from All
</Directory>
ErrorLog "/private/var/log/apache2/proyecto-error_log"
CustomLog "/private/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.Para que todos estos cambios sean efectivos, hay que reiniciar el servidor apache.
$ sudo apachectl restartLa 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 con 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 "/Users/sfprojects/proyecto/web" DirectoryIndex index.php <Directory "/Users/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 "/private/var/log/apache2/proyecto-error_log" CustomLog "/private/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 será necesario escribir index.php en la URL. Esto es posible gracias a las reglas de reescritura configuradas en el fichero web/.htaccess.Se puede 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.phpDebería de mostrarse la barra de debug web en la esquina superior derecha, incluidos los iconos.

En este punto, Symfony 1.4.18 ya está instalado y es completamente operativo.
Relacionado
Para saber más
Fuentes
Para saber más
Fuentes
0 comentarios:
Publicar un comentario