Ver índice de contenidos del libro

A.4. HttpFragmentServiceProvider

El proveedor HttpFragmentServiceProvider proporciona soporte para la parte del framework Symfony que se encarga de procesar fragmentos de plantillas.

Advertencia Este proveedor de servicio solo funciona en Symfony 2.4 o superior.

A.4.1. Parámetros de configuración

  • fragment.path: la ruta que se utiliza en las URLs generadas para los fragmentos servidos mediante ESI o HInclude (por defecto es /_fragment).
  • uri_signer.secret: el valor aleatorio secreto que se utiliza para "firmar" la URI generada para cada fragmento servido mediante HInclude.
  • fragment.renderers.hinclude.global_template: el contenido (o plantilla Twig) que se utiliza por defecto al servir fragmentos mediante HInclude.

A.4.2. Servicios proporcionados

  • fragment.handler: una instancia de la clase FragmentHandler.
  • fragment.renderers: un array de servicios que renderizan fragmentos de plantillas (por defecto contiene el renderizador "inline", el de ESI y el de HInclude).

A.4.3. Cómo se registra el proveedor

El siguiente código muestra un ejemplo de cómo registrar este proveedor:

$app->register(new Silex\Provider\HttpFragmentServiceProvider());

A.4.4. Ejemplos de uso

Nota En esta sección se asume que usas Twig para crear tus plantillas.

El soporte de fragmentos de plantillas te permite crear una página combinando varios controlladores, peticiones y plantillas a la vez. Para incluir un fragmento, utiliza la función render() de Twig:

El contenido principal de la página.
 
{{ render('/foo') }}
 
Aquí continúa el contenido principal de la página.

La llamada a la función render() se reemplaza por el contenido devuelto al acceder a la URL /foo (interamente Silex hace una subpetición para acceder a esa URL).

Además de las subpeticiones, también puedes usar ESI (la subpetición la realiza el reverse proxy) o HInclude (la subpetición la realiza el navegador):

{{ render(url('route_name')) }}
 
{{ render_esi(url('route_name')) }}
 
{{ render_hinclude(url('route_name')) }}