El nuevo sub-framework encargado de gestionar fragmentos de contenido

Posted by victor on February 25th, 2013
symfony2-logoHoy se ha presentado en el blog de Symfony un nuevo sub-framework para gestionar de forma más eficiente y desacoplada los fragmentos de contenido en plantillas Twig. Estos fragmentos no son más que partes de una plantilla cuyo contenido es resultado de renderizar la plantilla asociada a la acción de un controlador. Como parte de las refactorizaciones que se están llevando a cabo en la versión 2.2, se ha ha creado el fragment sub-framework, que es parte del HttpKernel, y a el se ha movido la lógica que antes se situaba en el FrameworkBundle. Con todo  esto se ha conseguido:
  • La gestión de fragmentos de contenido está más desacoplada y es más fácil de integrar en proyectos como Drupal.
  • Se ha mejorado la legibilidad de código sustituyendo el parámetro standalone por strategy en la función render():
    {# ANTES #}
    {# Usando la estratégia sub-request #}
    {{ render(url('route_name')) }}
    
    {# Usando la estratégia ESI - Edge Side Includes #}
    {{ render(url('route_name', { strategy: 'esi' })) }}
    
    {# Usando la estratégia HInclude tag via a regular URL #}
    {{ render(url('route_name', { strategy: 'hinclude' })) }}
    
    {# AHORA #}
    {# Usando la estratégia sub-request #}
    {{ render(url('route_name')) }}
    
    {# Usando la estratégia ESI - Edge Side Includes #}
    {{ render(url('route_name', { standalone: 'esi' })) }}
    
    {# Usando la estratégia HInclude #}
    {{ render(url('route_name', { standalone: 'hinclude' })) }}
    Además, ahora el código puede ser más bonito porque se han creado funciones para cada estratégia:
    {# sub-request interno resuelta por Symfony#}
    {{ render(url('route_name')) }}
    
    {# Usando la estratégia ESI - Edge Side Includes #}
    {{ render_esi(url('route_name')) }}
    
    {# Usando la estratégia HInclude #}
    {{ render_hinclude(url('route_name')) }}
  • Como la referencia a los fragmentos se realiza por rutas absolutas, el fragment sub-framework no depende del gestor de rutas:
    {# Fragmento referenciado mediante URL #}
    {{ render(url('route_name')) }}
  • Ahora se pueden emplear, mediante la notación bundle, la refetencia a fragmentos usando los controladores:
    {# Fragmento referenciado mediante un controlador #}
    {{ render(controller('Bundle:controlador:action')) }}
  Profundizar más: El ESI en Symfony2 ESI Language Specification 1.0

Comments

comments powered by Disqus