Publica tu how-to

Dinos como hacer lo que sabes hacer, mándanos un email a wdonet@gmail.com y lo publicamos (dos días máximo) o si te interesa unirte al equipo de redactores, también háznoslo saber por correo.

Instalando e iniciandose con Symfony 1.4

Symfony es un framework para desarrollar aplicaciones web de manera rápida bajo PHP.

Actualmente se encuentra en su versión 1.4, y a la fecha es uno de los frameworks más populares para desarrollar con PHP (junto con CakePHP y el Zend Framework...)

El sitio web de Symfony presume su framework como uno de los más rápidos, no sólo para desarrollar, sino también para aprender. Según ellos, siguiendo sus tutoriales en un programa sencillo de aprendizaje, se podría decir que se toman exactamente 2 días (48 horas) en aprender Symfony. En realidad se podría llevar un poco más, dependiendo el tiempo libre que se tenga (además de que hay que dormir, comer y demás...)

La instalación, configuración y levantamiento de un primer proyecto en Symfony es, en realidad, sencillo:



Requisitos previos
Un entorno LAMP podría ser suficiente (GNU/Linux  /  Apache  /  MySQL  /  PHP), o WAMP si se prefiere. En vez de MySQL, Symfony también puede trabajar, gracias a Doctrine, su ORM por defecto, con PostgreSQL, SQLite entre otros.

El script localizado en:

http://sf-to.org/1.4/check.php

Permite verificar si las características de la máquina corresponden con las necesarias para instalar y utilizar Symfony. Se baja el script y se ejecuta en el equipo con:

php check_configuration.php


Instalación
Lo primero es descargar Symfony. En http://www.symfony-project.org/installation se encuentra una pequeña guía para bajar la versión que se desee instalar.

Una vez con el paquete, debe descomprimirse (con tar -xzvf archivo.tar.gz) El directorio en donde se descomprime el paquete será el lugar en donde los proyectos de Symfony consultarán para los archivos que comparten dichos proyectos. El directorio en donde queda descomprimido Symfony se puede renombrar a symfony para simplificar.

Hecha la instalación, se puede verificar que todo está en orden con:

php ruta_donde_se_descomprimio_symfony/symfony/data/bin/symfony -V

lo cual debe mostrar la versión instalada de Symfony.

Si no se le pasan parámetros a symfony, se muestran todos los comandos disponibles para Symfony.


Creación de un proyecto
Ubicados ya en el lugar en donde se desea crear el proyecto Symfony, se escribe:

php ruta_donde_se_descomprimio_symfony/symfony/data/bin/symfony generate:project NOMBRE_PROYECTO

Lo cual creará dentro del directorio actual la estructura de un proyecto Symfony, que incluye varios directorios, utilizados por el framework para acceder a los recursos: la aplicación, el MVC, la base de datos, etc.

También se crea un acceso directo a symfony, para no tener que teclear toda la ruta donde se descomprimió el framework.

Configuración de la Base de Datos
La conexión a la Base de Datos se configura con un simple comando de Symfony:

php symfony configure:database "mysql:host=localhost;dbname=nombrebd" usuario password

Por default, Symfony utiliza Doctrine como ORM. Aunque también se puede utilizar Propel.

Creación de una aplicación
En Symfony, los proyectos se componen de aplicaciones (que a su vez se componen de módulos, y estos de tareas -o tasks-).

La aplicación principal, el portal por así decirlo, se llama frontend (mientras que la aplicación de administración se llama backend). La creación de una aplicación es un proceso sencillo:

php symfony generate:app frontend

Esto creará, dentro del directorio del proyecto, en el subdirectorio apps, un subdirectorio llamado frontend, con la estructura que el framework utiliza para sus aplicaciones.

Otras configuraciones
Hay algo que debe tenerse en cuenta también, y es que los subdirectorios cache y log del proyecto deben poder ser vistos y escritos por cualquier usuario del sistema. En GNU/Linux:
chmod 777 cache/ log/

Configuración del servidor web
Para poder acceder al proyecto, ya sea en desarrollo o en producción, el servidor web debe configurarse para que se pueda ver dicho proyecto. Una forma sencilla, pero poco elegante, es crear el proyecto directamente en el directorio en donde el servidor web publica, por ejemplo /var/www. Sin embargo, la mejor manera es utilizando VirtualHosts:

NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080
<VirtualHost 127.0.0.1:8080>
  DocumentRoot "ruta_al_proyecto/web"
  DirectoryIndex index.php
  <Directory "ruta_al_proyecto/web">
    AllowOverride All
    Allow from All 
  </Directory>
  Alias /sf ruta_donde_se_descomprimio_symfony/symfony/data/web/sf 
  <Directory "ruta_donde_se_descomprimio_symfony/symfony/data/web/sf">
    AllowOverride All
    Allow from All  
  </Directory>
</VirtualHost>

Con lo cual, se podrá acceder a la aplicación en http://localhost:8080. Obviamente, se puede configurar otro puerto, y los directorios deben apuntar a donde se encuentre en realidad el proyecto. Nótese el segundo alias, el que dice /sf, este apunta a donde se instaló Symfony. Esto se debe a que todo proyecto espera encontrar en su ruta /sf todo aquello que Symfony pone a disposición de todos los proyectos. En vez de descromprimir Symfony intacto proyecto por proyecto, un Alias simplifica esta labor.

Y precisamente, lo único que queda es probar.

Accediendo a:
http://localhost:8080/index.php/

Se debe de poder ver la pantalla de bienvenida por default que Symfony le pone a todos sus proyectos.

En:

http://localhost:8080/frontend_dev.php/

se accede a la misma aplicación pero en la versión de desarrollo. Podrán notarse (si se configuró correctamente el VirtualHost), que aparecen en la parte superior derecha los iconos para diversa información útil a un desarrollador.


Symfony tiene muchas características interesantes. Es un framework que puede dar mucho de sí mismo, sólo es cosa de ponerse a aprenderlo, en un proceso que de por sí no es complicado. Una buena guía se puede encontrar en el tutorial Jobeet, para aprender Symfony en 48 horas...

Nota: este tutorial, salió prácticamente intacto de lo que establece la guía Getting started del sitio de Symfony.

15 comentarios:

  1. Muy buen HowTo...
    Muchas gracias por compartirlo con nosotros!!
    Me ha servido mucho!

    Solo me surgió un problema... me aparece el siguiente texto pero sin imagenes, ni color, ni nada... solo texto...
    Tal vez puedan ayudarme a resolverlo...

    Desde ya muchas gracias =)
    ________________________________________________
    symfony PHP Framework
    ok
    Symfony Project Created
    Congratulations! You have successfully created your symfony project.

    Project setup successful
    This project uses the symfony libraries. If you see no image in this page, you may need to configure your web server so that it gains access to the symfony_data/web/sf/ directory.
    This is a temporary page
    This page is part of the symfony default module. It will disappear as soon as you define a homepage route in your routing.yml.
    What's next

    * Create your data model
    * Customize the layout of the generated templates
    * Learn more from the online documentation
    ________________________________________________

    ResponderEliminar
  2. Hola que tal!
    que gusto que el post te haya parecido interesante y lo estés intentando...

    Bueno, en principio, tu problema parece ser causado por un problema de configuración en el servidor Web. Es decir, todo está correcto, la aplicación podría correr ya así, pero te falta (según puedo deducir) configurar correctamente el VirtualHost en que apuntes a tu proyecto de Symfony.

    En este mismo post explico como debería quedar, y eso implica que en tu VirtualHost debe haber un alias a /sf y que apunte al directorio en que instalaste Symfony (no en tu proyecto sino en donde quedo Symfony!!), y de ahí al subdirectorio data/web/sf.

    Algo así:

    Alias /sf ruta_donde_se_descomprimio_symfony/symfony/data/web/sf
    <Directory "ruta_donde_se_descomprimio_symfony/symfony/data/web/sf">
    AllowOverride All
    Allow from All
    </Directory>


    Obviamente, debe poder hacerse la configuración del servidor web sin utilizar VirtualHosts, por lo que el Alias debería de poder encontrarse de alguna manera tambien, es cosa de buscarle... Pero lo que si es un hecho es que, acceder directamente a tu proyecto con tu navegador no es la solución, debes configurar el servidor web tambien...


    saludos!

    ResponderEliminar
  3. cuando hagan un publicacion especifiquen los pasos graficamente con imagenes

    ResponderEliminar
  4. hagan ejemplos con imagenes o algo asi para que los cibernautas podamos entender por que lo forma en la explican no es muy entendible para los usuarios

    ResponderEliminar
  5. grande uno me salvaste la plata, hacía horas que estaba configurando mal el server en
    gracias

    ResponderEliminar
  6. Gerley dijo...


    Hola Javier...
    Mil y mil gracias por tu publicación...EXCELENTE!


    Luego de cuatro días de intentos, aproximadamente unas 20 horas de tiempo 'perdido', gracias a tí he logrado configurar exitosamente Symfony 1.4.9. Tu publicación fue incluso mucho más clara y simple para mi, que la oficial (http://www.symfony-project.org/jobeet/1_4/Propel/es/01).


    Para quien pueda interesarle, luego de intentarlo con Xampp, Appserv, EasyPhp, el éxito fue con WAMPP 2.1.


    Gracias.

    ResponderEliminar
  7. buen día a todos, me alegra saber que está sirviendo para aclarar ideas...

    La cosa con un framework como symfony es, creo yo, que no sólo hay que meterle al desarrollo, sino un poquito también de administración de sistemas, configuración de servidores... No mucho, tampoco... una vez levantado el framework ya lo demás es puro desarrollo y diseño web ;)

    darwin: las imagens no las puse porque en realidad no hay pantallazos tal cual, muchas cosas las consigo vía la consola. Pero deja ver si el sitio de symfony usa imágenes en este mismo proceso y las importo aquí...

    ResponderEliminar
  8. EXCELENTEEE...!!!... Realmente no soy muy amiga de hacer las cosas por consola (aunque me lo han recomendado mucho), asi que cree mi proyecto con Netbeans... habia seguido los pasos una y otra vez, habia configurado mi servidor virtual y nada me funcionaba...

    Hasta que lei el ultimo comentario y me decidi a cambiar a WAMP 2.1 (yo utilizo appserv 2.5.10) y FUNCIONO ... !!! Casi no lo puedo creer...

    Asi que muchas gracias a los dos, por el blog y por el comentario que me salvo de una crisis de estres...

    Att: Viviana...

    ResponderEliminar
  9. Buenisimo el aporte de igual manera pude instalarlo mi pregunta es porque no funcionaria con el appserv 2.5.10?? o con cualquier otro y si con el wamp

    ResponderEliminar
  10. en lo particular nunca he usado appserv, y wamp hace mucho que no lo uso, sin embargo lo mas seguro para tratar de entender por que, sera observar los logs de apache/mysql y los registros de error de PHP antes que cualquier otra cosa, hasta entender en donde estaria el problema.... Evidentemente, si jala con una infraestructura y no con otra, entonces la infraestructura es el problema, antes que el framework...

    ResponderEliminar
  11. el error del primer comentario es que te falta la carpeta sf que deberia estar en /tuproyecto/web/sf/
    aqui van algunas imagenes y css... si ellos faltas ves el texto pero sin ninguna maquetacion

    ResponderEliminar
  12. @diazknel si así es, aunque la solución que yo comento, la de configurar el servidor web es equivalente a crear el directorio sf y poner ahí las imágenes y css , solo que de manera mucho mas genérica y por tanto mas funcional... cuestión de gustos tal vez ;)

    ResponderEliminar
  13. Buenas yo sigo teniendo el problema de no poder ver las imagenes cuando creo un proyecto. configure el httpd.conf, agregue lo del alias con la ubicacion donde descargue el symfony y nada. Tambien agregue la carpeta sf en web y le agregue la carpeta de css e imagenes y nada. Pense que era la cache de mi navegador, la borre y nada tampoco.

    Asi tengo mi httpd.conf:

    # Asegúrate de que sólo tienes esta línea una vez en todo el archivo de configuración
    NameVirtualHost 127.0.0.1:8080

    # Esta es la configuración para miApp
    Listen 127.0.0.1:8080


    DocumentRoot "/var/www/miApp/web"
    DirectoryIndex index.php

    AllowOverride All
    Allow from All


    Alias /sf /home/dayana/symfony-1.4.16/data/web/sf

    AllowOverride All
    Allow from All

    ResponderEliminar
  14. Disculpen, no se copio bien. A ver si ahora:

    # Asegúrate de que sólo tienes esta línea una vez en todo el archivo de configuración
    NameVirtualHost 127.0.0.1:8080

    # Esta es la configuración para Jobeet
    Listen 127.0.0.1:8080


    DocumentRoot "/var/www/miApp/web"
    DirectoryIndex index.php

    AllowOverride All
    Allow from All


    Alias /sf /home/dayana/symfony-1.4.16/data/web/sf

    AllowOverride All
    Allow from All

    ResponderEliminar
  15. hola,
    me da la impresion de que, por tu httpd.conf, estas intentando levantar todo dentro del raiz de Apache. Asegurate entonces que tu configuracion de apache no haga uso de algun virtualhost para el puerto 8080. Si es asi, entonces la configuracion de Symfony deberia de ir dentro de la del virtualhost, no en la raiz de httpd.conf...

    ResponderEliminar

Que opinas sobre esta publicación?