Comparte en Facebook Twitter Google+

symfony-controllers

Continuamos con nuestra serie de introductoria a Symfony, en este post vamos a adentrarnos en la app demo que instalamos en la primera clase de la serie, esta app demo, excelente trabajo de @javiereguiluz, es una aplicación totalmente funcional hecha en Symfony, siguiendo las mejores convenciones de desarrollo, cuya finalidad es la de servir como plataforma de aprendizaje sobre el uso del framework.

Si no has seguido la serie desde el inicio te recomiendo darle una mirada a las clases anteriores

Siempre que queremos aprender una nueva tecnología nos preguntamos ¿Para qué aprenderla ?, ¿Qué puedo hacer con ella ? y por supuesto quisiera ver un ejemplo, y claro como estamos hablando de un framework de php seguro te dices ok y ¿ Cómo hago una página  ?. Teniendo en cuenta que una página en php es solo la respuesta a una petición de un cliente a un servidor, petición que se puede hacer mediante el protocolo http usando una URL, http://127.0.0.1:8000/blog/

symfony-blog-index

Seguramente puedes observar el botón que dice show source code, bueno hazle click …

symfony-demo-index-source-code

Como puedes observar, aquí la app demo te está mostrando parte del código que hace que el servidor te devuelva la lista de posts, a la petición que le acabamos de realizar, primero podemos ver que el método index esta respondiendo a nuestra url, este método utiliza los repositorios de Doctrine para buscar la lista de últimos posts, pero no te preocupes por eso en este momento, concentrémonos por ahora en entender como configurar qué acción de que controlador va a responder a determinada url.

En Symfony gracias a su gran flexibilidad, las rutas pueden ser configuradas en distintos formatos, esos comentarios que ves que tiene forma de función @Route(), pues bueno esas son las anotaciones, estas son interpretadas por uno de los componentes que vienen configurados con la versión estándar de Symfony, observa la línea 4, ahí le estamos diciendo a Symfony, que este será el controlador que responderá a todas las peticiones que tengan una url que comience por blog, luego podemos ver justo arriba de la acción indexAction que la anotación indica que esta será la acción que responderá a la ruta base de blog, otro punto importante que podemos observar es que por convención obligatoria todos los métodos que vayan a ser usados para responder a peticiones deben tener el sufijo Action, de lo contrario Symfony nos arrojará un error 404, tal cual como si no tuviéramos ningún método codificado, ahora que ya tenemos claro como asociar una url a una acción, veamos como esta acción nos genera una respuesta.

Primero y principal todas las acciones en Symfony deben devolver un objeto de tipo

Si entendemos el concepto de Es un de la poo, se puede decir que cualquier instancia de una clase que herede de la clase Response podrá ser devuelto como respuesta en nuestras acciones, ahora seguro estas pensando, pero oye en la acción se está devolviendo es un método render que yo no veo en ningún lado del controlador BlogContoller!! y en parte es cierto, pero este controlador está extendiendo a la clase Symfony\Bundle\FrameworkBundle\Controller\Controller, y en esta clase está definido el método render que estamos llamando.

Como nuestro BlogContoller extiende de la clase Controller (cosa que como la mayoría de las cosas en Symfony es opcional, pero que te recomiendo hacer, porque esta clase nos provee de un set de métodos que nos facilitaran enormemente la vida) tenemos acceso al uso del método render, incluso a sobrescribirlo si lo consideráramos necesario , ah y si, el servicio templating está devolviendo un objeto de tipo Response, y como puedes ver el primer parámetro es la ruta relativa la plantilla html.twig, y el segundo un arreglo con los parámetros que usará esta plantilla, ahora ¿ cómo Symfony localiza la plantilla ?

Symfony busca las plantillas con la siguiente convención NombreBundle:Directorio:archivo, si obviamos el nombre del bundle, Symfony buscará la plantilla dentro del directorio app/Resources/views/Directorio, que es donde la app demo tiene guardada las plantillas.

Por el momento ten en cuenta como está definida la acción en el controlador, no son mas de 5 líneas y así es que debe verse una acción en un controlador, cuya misión es ser el pegamento entre las vistas y la base de datos, nota que las otras funcionalidades de la aplicación como el botón show source code, no están programadas en el controlador, porque en realidad es una extensión de Twig desarrollada a medida para esta app la que se encarga de esta funcionalidad, en el siguiente post estudiaremos un poco el manejo de plantillas con twig.

Regístrate hoy en Styde y continua mejorando tus habilidades: ver planes.

Lección anterior Introduccion a Symfony III, Ambientes de desarrollo Lección siguiente Introducción a Symfony V, Vistas