Quantcast
Channel: BorrowBITs » bundle
Viewing all articles
Browse latest Browse all 2

Qué es y cómo funciona Symfony2: Conceptos claves

$
0
0

learn_symfony_books
Symfony2 es el uno de los framework mas potentes que existen para desarrollar aplicaciones web. Punto.

Pero, ¿como funciona? ¿Que es realmente? Con este artículo, pretendo que te quede claro como funciona el proceso a alto nivel.

También te invito a que eches un vistazo a este otro artículo, en el que además de dar unas pinceladas al funcionamiento general de Symfony2, se explica cómo realizar la instalación paso a paso. En este artículo, trataré de complementar la información y para ello repasaremos algunos conceptos muy por encima:

El “bundle”

¿Que es eso?

Es una aplicación web. Cuando quieres empezar un proyecto, lo que haces es crear un “bundle” dentro de la estructura de directorios de Symfony2. Imagina que existe una carpeta que contiene todos los “bundles” creados. Un bundle es por tanto, una aplicación COMPLETA e indivisible.

¿En quÉ se traduce esto?

Una página web hablando sobre ti sería un bundle. Un módulo para hacer “login” con Facebook, sería otro bundle. La característica principal es que carece de sentido dividirlos. Y que se pueden portar para reutilizarlos en otras aplicaciones.

Modelo-Vista-Controlador

La filosofía de Symfony2 es que “cosas” diferentes han de ir en diferentes “sitios”. Olvidaos de mezclar en un mismo archivo código de consulta, PHP y HTML. Olvidaos también de generar rutas in situ. ¿Por qué? Sencillo:

Una aplicación web consta de tres partes:

El modelo incluye tanto la estructura de la base de datos como todo el código de consulta. La vista es el modo en que se van a representar los datos. El controlador se refiere al procesado de datos.

¿Como organiza todo esto Symfony2?

El directorio de nuestro “bundle” , seguirá una organización similar a esto:

Controlador

/Controller que contiene un archivo por cada controlador definido

Modelo

/Entities que contiene un archivo por cada “sistema de datos” definido

Vista

/views que contiene un archivo por cada “plantilla” que hayamos definido

Routing

/routing que es un archivo en el que definimos que controlador se ejecuta con cada ruta (url) solicitada

Hemos visto muy por encima cada uno de los componentes, pero

¿qué hay realmente detrás de todo esto? ¿Magia?

Modelo: Doctrine2

Doctrine es el framework encargado de gestionar todo lo que tiene que ver con el modelo de datos. Cada archivo del “modelo” es en realidad una clase, y son conocidas como “entidades”. Esto quiere decir que nosotros sólo tenemos de preocuparnos de crear las entidades y doctrine se encargará de generarnos la base de datos y las tablas: todo esto tras introducir una simple orden en linea de comandos. Para acceder a los datos, desde el controlador se utiliza un objeto especifico denominado “entityManager”.

$entityManager->find( entidadX , Y)

Esta sencilla sentencia nos devolvería un objeto de la clase entidadX y según los parámetros Y , así de fácil.

¿Qué pasa si necesito realizar consultas mas complejas?

Doctrine tiene diferentes funciones definidas para realizar consultas que cubrirán algunas de nuestras necesidades. Es posible añadir consultas propias, que se pueden definir en un archivo de repositorio, con el mismo nombre que la entidad que queremos consultar, y situado en el mismo directorio.

Vista: Twig

Twig es un gestor de plantillas orientado a facilitar la labor de diseño. La potencia reside sobretodo en la posibilidad de crear plantillas que heredan de otras, de forma que podemos ir “rellenando” huecos de una plantilla padre. La plantilla se invoca desde el controlador, en la siguiente forma:

render(nombre_plantilla_twig , datos_a_representar);

¿Otro lenguaje mas? Como si ya no tuviera suficiente

Es un lenguaje que merece la pena aprender, por su simplicidad, y porque se complementa mucho mejor con el lenguaje HTML que PHP al generar la interfaz. Además, el código resultante es muy breve comparado con PHP como motor de plantillas.

Sistema de routing

Cada ruta definida en nuestra aplicación, se asocia con un controlador. De esta forma cuando el cliente introduce una dirección que apunta hacia nuestro sitio, se ejecutará en nuestro servidor el controlador asociado a esa ruta.

¿Pero todo esto para que?

Cada “asociación” tendrá un “nombre de ruta” que será lo que utilicemos para invocar a nuestras rutas desde nuestra aplicación. Si en algún momento queremos modificar algunas de nuestras rutas, podremos hacerlo directamente en el archivo de routing, puesto que en nuestros controladores se estará invocando a partir del nombre asociado a la ruta:

Nombre de la ruta: Ruta → controlador

Poniendo todo junto

Perdona, pero con tanta explicación me he quedado un poco perdido. ¿Podrías repetirme como interactúan los diferentes componentes a modo de resumen?

Supongamos, alguien introduce en su navegador www.nuestrapagina.com/seccionA

Al recibir esta petición en nuestro servidor, a través del módulo de routing, Symfony se da cuenta de que la ruta está asociada al “controladorB” y por tanto es ejecutado. Si el controlador necesita recoger algunos datos para generar la respuesta a la petición, invoca al “entityManager” de Doctrine, indicándole que quiere todos los objetos de tipo “entidadC” cuyo campo “campoD” sea igual a “XXX”. El entityManager devuelve una variable con todos los objetos correspondientes a ese criterio de búsqueda. Una vez obtenidos desde el controlador, los datos son procesados. Y se decide que se mostrará “arrayE” , en la plantilla “plantillaF”. Mediante la sentencia “render” se invoca desde el controlador a la vista, diciéndole “representame el “arrayE” en la plantilla “plantillaF”.

Desde la plantilla se pueden acceder al Array y a las variables del cada objeto del Array:

[HTML]
{% for objeto in array %}
{{ objeto.variable }} {% else %}
{{ el array está vacio }}
{% endFor %}

[/HTML]


Así de sencillo.

Para terminar

¿Esto es todo? ¿Hay mucha gente detrás de todo esto?

Existe una gran comunidad de este framework. Además, en la web oficial de Symfony2 podrás encontrar muchos “bundles” disponibles para instalarlos y utilizarlos en tus aplicaciones, reutilizando mucho código, de la misma forma que en un sistema de gestión de contenido o CMS como Drupal, WordPress o Joomla.

Hablando de los CMS. La versión 8 de Drupal, que saldrá en agosto, está comenzando a integrar componentes de Symfony2. Esto puede ser una potente ventaja: contar con las facilidades que te da un CMS con la flexibilidad y y potencia para desarrollar código de Symfony.

Espero que te haya sido ameno de leer y que ahora te haya quedado claro en que consiste este potente framework. Obviamente, hay mucho mas que decir. Trataré de explicar mas cosas en futuras publicaciones, siempre desde la simplicidad.

¿Quieres saber mas sobre todo esto? No tienes más que preguntar.


Viewing all articles
Browse latest Browse all 2

Latest Images



Latest Images