Comunidad de diseño web y desarrollo en internet online

Introducción e instalación de Symfony2

Symfony2 es uno de los frameworks más completo para PHP. Su motor de plantillas es simplemente sorprendente, fácil de usar y extender. Su ORM, llamado Doctrine, es de igual manera una muy poderosa herramienta, muy versátil y flexible. Claro está que Symfony2 no nos obliga a usar ni Twig como motor de plantillas ni tampoco a Doctrine como ORM, este es uno de los puntos más grandiosos de Symfony2: es muy atómico.

En resumen, Symfony2 es un conjunto de componentes acoplables destinados para que, trabajando juntos, proporcionen una poderosa herramienta de trabajo.

Porqué usar Symfony2


Aunque todos estamos de acuerdo con las muchas ventajas que nos proporciona el framework y su filosofía de trabajo, también es verdad que muchos desarrolladores llegamos al punto de la frustración cuando notamos la marcada diferencia en la curva de aprendizaje. Es decir, si ustedes como yo vienen de programar usando Codeigniter el cual es famoso por su simplicidad y por la curva de aprendizaje casi inexistente, entonces saben lo que se siente cuando uno intenta por primera vez usar Symfony2 (yo creo que tuve una depresión post-traumática o algo por el estilo).

Symfony2 es demasiado distinto, esta diseñado bajo una arquitectura orientada a servicios, donde la mayoría de nuestros objetos o servicios viven dentro de su contenedor de servicios.

Aunque esto parezca chino para la mayoría, para simplificar las cosas podemos decir que esto nos provee una manera muy organizada y limpia de programar una vez te acostumbres a ella. De hecho, se vuelve adictivo ver un código bien programado en Symfony, todo queda tan limpio y elegante que cuando ves tus trabajos anteriores usando CodeIgniter como es mi caso, te das cuenta de lo mucho que has aprendido, de lo mucho que ha mejorado tu manera de codificar, lo cual es, en cierta parte, algo motivador, así que si esto pudiera ser un incentivo, el usar Symfony mejorará tu código, aprenderás patrones de diseño, mejorarás considerablemente como programador y ya no te dará dolor de cabeza el mantener tus proyectos como en el pasado donde tenias que revisar toneladas de código repetitivo etc.


Cómo instalar Symfony2


Instalaremos Symfony2 usando composer y generaremos nuestro primer bundle.

Primero lo primero, comenzaremos por instalar y configurar un ambiente de desarrollo para symfony2, pudieramos instalar Symfony2 simplemente descargandolo de la página oficial www.symfony.com, pero les recomiendo descargarlo por composer como sugieren en la página http://symfony.com/download.

Instalar Composer de manera global en Linux:

Necesitaremos el paquete curl para descargarnos el ejecutable de composer, lo podemos instalar con el siguiente comando si usas Ubuntu/Debian

Código :

sudo apt-get install curl

Luego de tener instalado nuestro paquete nos descargamos Composer con el siguiente comando

Código :

$ curl -sS https://getcomposer.org/installer | php

Para tener composer de manera global movemos nuestro ejecutable a la carpeta /usr/bin con el siguiente comando:

Código :

sudo mv composer.par /usr/bin/composer

y listo, ya tenemos Composer instalado.

Instalar Symfony2 en nuestro servidor local

Asumiremos que ya tienes Apache2, PHP y mySQL instalados y corriendo, así que comenzaremos desde el punto de cómo configurar un servidor virtual para Symfony2 en Apache. Necesitaremos notificar en nuestro archivo /etc/hosts el nombre de nuestro servidor virtual:

Código :

sudo vim /etc/hosts

Luego agregamos el nombre de nuestro servidor virtual justo después de localhost como en el siguiente

Código :

127.0.0.1           localhost symfony.dev

Usaremos symfony.dev como nombre de nuestro servidor virtual, ahora necesitaremos crear el archivo de configuración apache para nuestro servidor virtual:

Código :

sudo vim /etc/apache2/sites-available/symfony.dev

Código :

<VirtualHost *:80>
  ServerName symfony.dev
  DocumentRoot "/var/www/symfony.dev/web"
  DirectoryIndex app.php
  <Directory "/var/www/symfony.dev/web">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>


Ahora nos descargamos Symfony2 usando Composer al directorio de nuestro servidor local Apache:

Código :

composer create-project symfony/framework-standard-edition symfony.dev/ 2.4.0


Symfony.dev es el nombre del directorio destino donde composer instalará Symfony2, puedes colocar allí el valor que desees.

Luego de descargar el framework nos hará una serie de preguntas para cargar valores de configuración, tales como el nombre de nuestra db, si usaremos mysql o postgresql etc… llenamos estos valores con los nuestros y luego habilitamos nuestro servidor virtual en apache:

Código :

sudo a2ensite symfony.dev

Listo, si hemos realizado todos los pasos de manera correcta deberíamos poder ver al framework corriendo sin problemas con la siguiente dirección http://symfony.dev/app_dev.php



Symfony2 web interface:


Symfony2 viene con una interfaz web para cargar algunos valores de configuración, estos son los mismos que nos pregunta la consola después de haber instalado Symfony2 con composer. Tomate tu tiempo y revisa cada una de las páginas del demo de la web interface, cada una de ellas muestra algunos snippets con el código que está siendo utilizado para presentar esa sección del demo.





Los Bundles de Symfony2


Un Bundle es básicamente una agrupación de plantillas, archivos de configuración y clases de PHP necesarias para programar algún funcionamiento determinado en una aplicación de Symfony2. ¿Recuerdan la estructura de directorios de Codeigniter?, donde había un solo directorio para los controladores. otro para los modelos y otro para las vistas, lo cual volvía muy engorroso el codificar una aplicación grande y compleja, 100 o más controladores en un mismo directorio y aunque esto se puede separar en codeigniter, igual sigue siendo poco práctico comparado con el sistema de bundles de Symfony2.

Un bundle también tiene sus directorios para MVC, y puedes llamarlos como tu quieras, pero mejor sigue las convenciones para el nombramiento de bundles.

Usando los Generadores de Symfony2

Symfony2 viene con un poderoso componente de consola, el cual nos provee de varios comandos cuya finalidad es facilitarnos la vida a la hora de desarrollar aplicaciones, uno de estos es el comando:

Código :

php app/console generate:bundle  


Obviamente los comandos deben ser ejecutados desde el directorio raíz de nuestra aplicación
php app/console te mostrará todos los comandos disponibles en el framework.


Este comando nos ayuda a generar los archivos básicos de un bundle, al ejecutarlo se nos presentarán varias opciones que nos permitirán configurar el bundle según nuestros requerimientos, de momento vamos a ejecutar el comando con todas las opciones ya predefinidas.

Código :

php app/console generate:bundle --namespace=Example/ItemBundle --format=yml --bundle-name=ExampleItemBundle --dir=src


Después de ejecutarse el comando, el generador de Symfony2 habrá codificado un bundle básico que puede ser usado como punto de partida. Este bundle de ejemplo es funcional, es decir, symfony2 ya hizo todo lo necesario para que puedas ejecutar el bundle sin problemas, sin embargo explicaremos algunos de los pasos importantes ejecutados.


  • Actualización del Kernel: Seguro notaste durante la ejecución del comando generate:bundle que el generador de Symfony2 pregunta si deseas confirmar la actualización automática de tu kernel. Con esto el framework se refiere al archivo AppKernel.php que se encuentra en el directorio app del framework, fijate que en el método registerBundles deberías poder ver la siguiente sentencia (en caso de que hayas ejecutado el comando tal cual se presenta en este tutorial): new Example\ItemBundle\ExampleItemBundle(). En Symfony2 cada nuevo bundle debe ser registrado en el kernel en la misma forma que lo está nuestro ExampleItemBundle, esto incluye los bundles de terceros.

  • Actualización del archivo de configuración de rutas: Symfony2 también nos pregunta si deseamos actualizar automáticamente el registro de rutas para nuestro bundle, este comando básicamente agrega las rutas de nuestro bundle al archivo principal de rutas localizado en app/routes.yml.

  • Directorios generados: El generador también nos crea los directorios necesarios para nuestro bundle base, es importante tratar de usar las mismas convenciones que el generador, esto es por cuestiones de portabilidad.


Cómo funciona un bundle


Ya para este momento tenemos un bundle base funcionando perfectamente, ahora... como funciona ?


El controlador

Symfony nos generó un controlador base que se encuentra en src/Example/ItemBundle/Controller/DefaultController.php. Este controlador cuenta con un método acción llamado indexAction en el cual podemos ver como se recibe un parámetro por la url, tal cual como los controladores de Codeigniter o Laravel, y luego devolvemos la plantilla renderizada y le asignamos a la plantilla el parámetro name. En este ejemplo lo mas importante es notar el controlador padre del cual extendemos a nuestro controlador, aunque esto no es obligatorio debido a la gran flexibilidad que nos ofrece Symfony2, en la mayoría de los casos es recomendable extender al controlador padre, este nos proveerá de muchos métodos que nos facilitarán la vida.


Las rutas

EL framework también nos generó un archivo de rutas, donde está definida la ruta para acceder a nuestro controlador, este se encuentra en src/Example/ItemBundle/Resources/config/routes.yml

Código :

example_item_homepage:
    pattern:  /hello/{name}
    defaults: { _controller: ExampleItemBundle:Default:index }


Esta ruta además fue agregada al archivo global de rutas del framework el cual se encuentra en app/config/routing.yml

Código :

example_item:
    resource: "@ExampleItemBundle/Resources/config/routing.yml"
    prefix:   /

Como se puede observar, podemos definir un prefijo para la ruta que estamos importando. Por el momento no colocaremos nada pero en un futuro iremos colocando los prefijos necesarios para distinguir nuestras rutas.

La ruta del bundle que generamos define el patrón hello/{name} donde name es el parámetro que estamos recibiendo en el controlador. El sistema de rutas de Symfony2 nos permite definir restricciones basadas en el tipo de petición http (GET o POST), también podemos codificarles restricciones propias, pero todo a su paso.


Plantillas de Twig

Por el momento no hay mucho que agregar, Symfony2 generará una vista de ejemplo en el directorio src/Example/ItemBundle/Resources/views/Default/index.html.twig

Código :

Hello {{ name }}!

Aquí podemos ver cómo se imprimen variables en twig, {{name}}.

Por último deberíamos poder observar a nuestro bundle trabajando http://symfony.dev/app_dev.php/hello/world

Listo! ya tienes tu primer bundle configurado y trabajando, tomate tu tiempo y ve revisando cómo funciona siguiendo la explicaciones aquí dadas. En el próximo tutorial aprenderemos a definir nuestras entidades, exportarlas a la db y viceversa, además generaremos módulos cruds para nuestras tablas.

Hasta pronto.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate