Symfony - Un preludio

June 18, 2021

Tags: IT Staff ES 2024
Share

Table of contents

Quick Access

symfony

 

Para aquellos Drupaleros que aún no lo conocían, Symfony es probablemente el framework más popular de PHP. Cuenta con una comunidad lo suficientemente amplia y activa como para generar varios y distintos proyectos de software libre (Twig, Sílex, Laravel, entre otros). Con la introducción de Drupal 8, Symfony se ha convertido en una parte fundamental de la familia Drupal (aunque sería más correcto decir que Symfony adoptó la comunidad de Drupal en su familia). Este cambio ha sido lo suficientemente drástico en la estructura de nuestro CMS como para tomar un paso atrás y analizar lo que nos trae Symfony.

 

Al haber tenido la oportunidad de trabajar tanto con Drupal 8 como con Symfony últimamente, decidí aprovechar este blog para plasmar mis experiencias con el framework y sus componentes.

 

symfony

 

Construyendo un REST API con Symfony

Hasta hace un mes, mi experiencia con Symfony era bastante limitada. Sin embargo, un proyecto en Drupal 8 que estamos desarrollando en Rootstack y otro proyecto Open Source en el que he estado trabajando en Symfony me han dado una experiencia valiosa y hasta el momento ha sido una agradable sorpresa.

 

Comencemos por Symfony como framework, ya que es una base importante para entender su funcionamiento en Drupal 8. Symfony representa tanto un conjunto reutilizable de componentes PHP (que ya son utilizados en proyectos reconocidos como Laravel y phpBB) como un framework independiente para la creación de proyectos desde cero. Con el crecimiento exponencial de Symfony, se ha convertido en uno de los frameworks más empleados para el desarrollo moderno de proyectos PHP.

 

Uno de los primeros adoptadores de Composer (el manejador de dependencias de PHP inspirado en herramientas como npm y bundler), Symfony aprovecha la facilidad de implementación y ejecución para crear rápidamente entornos de desarrollo listos para trabajar. Además, su estructura MVC y su implementación de proyectos para el manejo de modelos y vistas (Twig, Silex, Propel, Doctrine, entre otros) permiten a los desarrolladores seguir patrones modernos de desarrollo.

 

Instalación de Symfony

Instalar Symfony no fue difícil, ya que cuenta con un instalador por terminal sencillo y rápido de usar. Para instalar Symfony, se utilizan las siguientes líneas de comando:

 
$ curl -LsS http://symfony.com/installer > symfony.phar $ sudo mv symfony.phar /usr/local/bin/symfony $ chmod a+x /usr/local/bin/symfony 

 

Una vez realizada la instalación, podemos comprobar su funcionamiento con el comando symfony. Después de la instalación, solo tenemos que usarlo para crear un nuevo proyecto con la estructura y dependencias finales:

 
symfony new myproject 

 

symfony

 

Estructura MVC en Symfony

Symfony maneja una estructura MVC. Los controladores se definen extendiendo la clase base Controller, lo que permite declarar las acciones y las rutas de la aplicación. Las rutas se pueden definir de varias formas (por anotación, YML, XML, etc.) y conectan las URLs locales con las acciones definidas, respondiendo a las solicitudes válidas del servidor con las vistas pertinentes.

 

Ejemplo de un controlador en Symfony:

 
namespace AppBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class DefaultController extends Controller {    /**     * @Route("/", name="homepage")     */    public function indexAction() {        return $this->render('default/index.html.twig');    } } 

Las vistas son manejadas por Twig, lo que facilita la creación de las páginas y la visualización de datos analizados por el controlador.

 

Ejemplo de vista en Twig:

 
{# app/Resources/views/default/index.html.twig #} {% extends 'base.html.twig' %} {% block body %} Welcome to Symfony! {% endblock %} 

 

El modelo puede ser implementado a través de uno de los ORM que ofrece Symfony: Propel o Doctrine. También se puede optar por implementarlo manualmente si se trata de un desarrollo pequeño o de prueba.

 

Componentes Útiles de Symfony

Symfony incluye varios componentes para facilitar el desarrollo, tanto front-end como back-end:

  • Componente de Formularios: Permite definir objetos Form a partir de un modelo y pasarlos a Twig para su renderización.
  • Manejo de Validaciones: Se pueden definir validaciones en varios formatos (anotaciones, YML, XML) y aplicarlas a objetos o entidades.
  • Manejo de Eventos: Permite controlar acciones a realizar en momentos específicos del ciclo de vida de la aplicación (por ejemplo, al recibir un request o al enviar un response).
  • Barra de Herramientas: Proporciona información invaluable como tiempo de carga, consultas realizadas, rutas y callbacks invocados.

 

Gracias a estos componentes, me sorprendió lo fácil que fue comenzar a desarrollar, sin preocuparme por detalles técnicos como conexiones a bases de datos o la interoperabilidad entre módulos y componentes.

 

Symfony en Drupal 8

La integración de Symfony en Drupal 8 ha traído consigo muchos cambios, sobre todo para quienes ya estaban acostumbrados a versiones anteriores. La pregunta es, ¿qué tanto ha cambiado con la adopción de Symfony? La respuesta corta es: mucho, pero para mejor. A continuación, hablaré sobre algunos de los cambios más significativos que he notado al trabajar con Drupal 8.

 

Cambios Drásticos con Symfony en Drupal 8

  1. Routing: Drupal 8 ha abandonado el sistema basado en hook_menu, utilizando el sistema de manejo de rutas de Symfony. Las rutas se definen en formato YML y son cargadas y cacheadas por el bootstrap de Drupal, lo que facilita el manejo de URLs y la integración con otros componentes.
  2. YAML: El componente de parsing de YML de Symfony ha impulsado el uso de este formato para la configuración de Drupal, reemplazando a Features. Ahora, los administradores de sitios pueden exportar la configuración de su sitio a código de forma fácil, rápida e integrada.
  3. EventDispatcher: Drupal 8 utiliza el EventDispatcher para invocar y recibir eventos de otros módulos, reemplazando el antiguo module_invoke de manera más eficiente.
  4. Twig: Aunque Twig y PHPTemplate son similares, Twig ofrece una sintaxis más limpia y funciones útiles, lo que facilita la creación de vistas sin necesidad de agregar lógica PHP directamente en ellas.
  5. Inyección de Dependencias: Symfony maneja la inyección de dependencias en Drupal 8, lo que facilita la creación e instanciación de objetos reutilizables en el core de Drupal, como los formularios y bloques.

 

Otros Cambios Relevantes

A lo largo del desarrollo de Drupal 8, se han realizado esfuerzos por eliminar elementos redundantes del API original de Drupal y reemplazarlos por los de Symfony. Por ejemplo, Drupal ha reemplazado el sistema de logs Watchdog por el componente Monolog de Symfony y ha implementado objetos Url para manejar hipervínculos en lugar de la función l().

 

Tras trabajar con Symfony y Drupal 8, puedo afirmar que Symfony es un framework maduro, estable y fácil de implementar para el desarrollo de aplicaciones PHP. La integración de Symfony con Drupal puede alejar a algunos usuarios acostumbrados a las versiones anteriores, pero aquellos que ya tienen experiencia con Symfony, o decidan adaptarse, encontrarán un sistema más estructurado y profesional para manejar los elementos de desarrollo en Drupal. Esto nos acerca más a estándares de desarrollo más eficientes y modernos.

 

Te recomendamos este video