Más con Symfony

11.6. Creando un nuevo proyecto Symfony

Crear un entorno adecuado para desarrollar proyectos Symfony es casi tan sencillo como la instalación del sandbox. De hecho, se va a explicar la versión simplificada del proceso de instalación ya que es equivalente a la instalación del sandbox.

La principal diferencia es que en este caso nos vamos a centrar en la configuración necesaria para que la aplicación web pueda ser accedida desde cualquier lugar de Internet.

Al igual que el sandbox, el proyecto Symfony viene preconfigurado para utilizar SQLite como base de datos, que ya se instaló y configuró en las secciones previas de este capítulo.

11.6.1. Descargar, crear el directorio y copiar los archivos

Cada versión de Symfony se puede descargar mediante un archivo .zip para poder crear después cada proyecto desde cero.

Descarga el archivo de Symfony desde su sitio web y extrae sus contenidos en un directorio temporal, como por ejemplo el directorio "downloads".

Explorador de Windows - Descargar y descomprimir el archivo del proyecto.

Figura 11.36 Explorador de Windows - Descargar y descomprimir el archivo del proyecto.

Ahora debemos crear el directorio definitivo donde residirán las librerías de Symfony. Este paso es ahora un poco más complicado que para el sandbox.

11.6.2. Estructura de directorios

A continuación se crea la estructura de directorios del proyecto. Si se comienza por la raíz de la unidad D: por ejemplo, se crea un directorio llamado \dev y después otro directorio llamado sfproject:

D:
MD dev
CD dev
MD sfproject
CD sfproject

Ahora ya nos encontramos en D:\dev\sfproject y a partir de aquí se completa el resto de la estructura creando los directorios lib, vendor y symfony de forma consecutiva y en cascada:

MD lib
CD lib
MD vendor
CD vendor
MD symfony
CD symfony

Ahora ya nos encontramos en el directorio: D:\dev\sfproject\lib\vendor\symfony

Explorador de Windows - La estructura de directorios del proyecto.

Figura 11.37 Explorador de Windows - La estructura de directorios del proyecto.

Selecciona todos los archivos descomprimidos en el directorio temporal y cópialos en el directorio D:\dev\sfproject\lib\vendor\symfony. Verás que se están copiando 3819 archivos en el directorio de destino:

Explorador de Windows - Copiando 3819 archivos.

Figura 11.38 Explorador de Windows - Copiando 3819 archivos.

11.6.3. Creación e inicialización

Abre la consola de comandos, dirígete al directorio D:\dev\sfproject y ejecuta el siguiente comando:

PHP lib\vendor\symfony\data\bin\symfony -V

El resultado del comando anterior debería ser el siguiente:

symfony version 1.3.0 (D:\dev\sfproject\lib\vendor\symfony\lib)

Para inicializar el proyecto, ejecuta el siguiente comando:

PHP lib\vendor\symfony\data\bin\symfony generate:project sfproject

El resultado del comando anterior es una serie de operaciones sobre los archivos y directorios, incluyendo varios comandos de tipo chmod 777:

Explorador de Windows - Inicialización correcta del proyecto.

Figura 11.39 Explorador de Windows - Inicialización correcta del proyecto.

Desde la misma consola de comandos, crea una nueva aplicación de Symfony mediante el siguiente comando:

PHP lib\vendor\symfony\data\bin\symfony generate:app sfapp

Una vez más deberías ver una lista de operaciones sobre archivos y directorios, incluyendo varias operaciones de tipo chmod 777.

A partir de ahora, en vez de teclear PHP lib\vendor\symfony\data\bin\symfony cada vez que ejecutes un comando, puedes copiar en este directorio el archivo symfony.bat:

copy lib\vendor\symfony\data\bin\symfony.bat

Ahora se dispone de un atajo para ejecutar todos los comandos de Symfony desde el directorio D:\dev\sfproject. De hecho, ejecuta el siguiente comando desde el directorio D:\dev\sfproject:

symfony -V

Si todo funciona bien, deberías ver exactamente el mismo resultado que antes:

symfony version 1.3.0 (D:\dev\sfproject\lib\vendor\symfony\lib)

11.6.4. Creando la aplicación web

Las siguientes secciones asumen que has leído la parte anterior de este capítulo en la que se explica cómo hacer que el "Default Web Site" no interfiera en el puerto 80 del servidor web.

11.6.4.1. Añadir un nuevo sitio web para el proyecto

Accede a las Administration Tools para abrir el IIS Manager. En la columna de la izquierda, pulsa el botón derecho sobre el icono "Sites". Selecciona la opción "Add Web Site" e introduce "Symfony Project" como nombre del sitio web, D:\dev\sfproject como valor de la opción "Physical Path" y deja todos las demás opciones sin cambiar:

IIS Manager - Añadir un nuevo sitio web.

Figura 11.40 IIS Manager - Añadir un nuevo sitio web.

Pincha sobre el botón OK. Si se muestra una pequeña x en el icono del sitio web (dentro de Features View / Sites) puedes hacerla desaparecer pinchando sobre el "Restart" que se muestra a la derecha.

11.6.4.2. Comprobar si el sitio web responde

Selecciona el sitio "Symfony Project" en el IIS Manager y en la columna derecha pincha sobre la opción "Browse *.80 (http)".

Seguidamente verás el mismo mensaje de error que se producía al realizar la misma operación sobre el sandbox:

HTTP Error 403.14 - Forbidden

Al igual que en el caso del sandbox, el servidor web está configurado para no mostrar un listado de los contenidos del directorio.

Accede con tu navegador a la URL http://localhost/web para ver la famosa página "Symfony Project Created", aunque en este caso existe una pequeña diferencia respecto al sandbox ya que no se ve ninguna imagen:

Internet Explorer - Creado el proyecto Symfony, pero sin imágenes.

Figura 11.41 Internet Explorer - Creado el proyecto Symfony, pero sin imágenes.

Las imágenes no se muestran por pantalla, pero se encuentran en un directorio llamado sf dentro de la librería de Symfony. Hacer que se vean es muy sencillo, ya que solamente hay que crear un directorio virtual en /web llamado sf y que apunte a D:\dev\sfproject\lib\vendor\symfony\data\web\sf.

IIS Manager - Añadir un directorio virtual sf.

Figura 11.42 IIS Manager - Añadir un directorio virtual sf.

Después de realizar los cambios anteriores, ya puedes ver las imágenes en la página "Symfony Project Created":

Internet Explorer - Creado el proyecto Symfony con imágenes.

Figura 11.43 Internet Explorer - Creado el proyecto Symfony con imágenes.

Ahora la aplicación Symfony completa ya está funcionando. Para comprobarlo, accede con un navegador a la URL de la aplicación en http://localhost/web/sfapp_dev.php:

Internet Explorer - sfapp_dev.php se accede correctamente desde localhost.

Figura 11.44 Internet Explorer - sfapp_dev.php se accede correctamente desde localhost.

Antes de concluir, podemos realizar una última comprobación en local: observa los paneles "configuration", "logs" y "timers" de la barra de depuración web para asegurar que el proyecto es completamente funcional.

Internet Explorer - Los mensajes de log se pueden acceder desde localhost.

Figura 11.45 Internet Explorer - Los mensajes de log se pueden acceder desde localhost.

11.6.5. Configurar la aplicación para que se pueda acceder desde Internet

Al igual que el sandox, el proyecto de Symfony ya funciona bien en local, por lo que sólo se puede acceder desde http://localhost o http://127.0.0.1. A continuación se configura para que se pueda acceder desde cualquier lugar de Internet.

La configuración por defecto del proyecto impide que la aplicación se pueda ejecutar desde un lugar remoto, aunque en principio debería permitirse ejecutar tanto el archivo index.php como sfapp_dev.php. Si accedes al proyecto desde el servidor web mediante la IP externa del servidor virtual dedicado (por ejemplo 94.125.163.150) o mediante su nombre completo (por ejemplo 12543hpv163150.ikoula.com). También puedes probar esas direcciones desde el propio servidor, ya que no están mapeadas al 127.0.0.1:

Internet Explorer - Se permite el acceso a index.php desde Internet.

Figura 11.46 Internet Explorer - Se permite el acceso a index.php desde Internet.

Internet Explorer - No se permite el acceso a sfapp_dev.php desde Internet.

Figura 11.47 Internet Explorer - No se permite el acceso a sfapp_dev.php desde Internet.

Anteriormente se comentó que sería posible acceder a index.php y sfapp_dev.php desde un lugar remoto. No obstante, la ejecución de sfapp_dev.php falla porque por defecto no es posible su acceso remoto. Se trata de una medida de seguridad para impedir que los usuarios maliciosos puedan tener acceso al entorno de desarrollo, que contiene información potencialmente sensible sobre tu proyecto. Aunque puedes editar el archivo sfapp_dev.php para permitir el acceso remoto, te recomendamos encarecidamente que no lo hagas nunca bajo ninguna circunstancia.

El último paso consiste en simular un nombre de dominio real mediante la configuración del archivo "hosts". Este archivo realiza la resolución local de nombres sin tener que instalar el servicio DNS de Windows, que está disponible en todas las ediciones de Windows Server 2008 R2 y también en las ediciones Windows Server 2008 Standard, Enterprise y Datacenter.

En los sistemas operativos tipo Windows x64, el archivo hosts se encuentra en: C:\Windows\SysWOW64\Drivers\etc

Inicialmente el archivo hosts incluye la información necesaria para que el servidor pueda resolver localhost a 127.0.0.1 en IPv4 y a ::1 en IPv6.

A continuación se añade un nombre de dominio válido pero falso, como por ejemplo sfwebapp.local y se resuelve como el propio servidor local.

Cambios aplicados en el directorio "hosts".

Figura 11.48 Cambios aplicados en el directorio "hosts".

El proyecto Symfony ya se puede acceder remotamente, sin necesidad de DNS, a través de cualquier navegador instalado en el propio servidor web.