TwigServiceProvider

El TwigServiceProvider proporciona integración con el motor de plantillas Twig.

Parámetros

  • twig.path (opcional): Ruta al directorio que contiene archivos de plantilla Twig (también puede ser un arreglo de rutas).
  • twig.templates (opcional): Se trata de un arreglo asociativo de nombres de plantilla para el contenido de la plantilla. Usa esta opción si deseas definir tus plantillas en línea.
  • twig.options (opcional): Un arreglo asociativo de opciones Twig. Echa un vistazo a la documentación de Twig para más información.
  • twig.form.templates (opcional): Un arreglo de plantillas utilizado para reproducir formularios (disponible únicamente cuando está habilitado el FormServiceProvider).

Servicios

  • twig: La instancia de Twig_Environment. La principal forma de interactuar con Twig.
  • twig.loader: El cargador de plantillas Twig utiliza las opciones twig.path y twig.templates. También puedes reemplazar el cargador completamente.

Registrando

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path' => __DIR__.'/views',
));

Nota

Twig viene con el archivo “gordo” de Silex pero no con el normal. Si estás usando Composer, añádelo como dependencia a tu archivo composer.json:

"require": {
    "twig/twig": ">=1.8,<2.0-dev"
}

Integrando componentes de Symfony2

Symfony incluye un puente a Twig que proporciona integración adicional entre algunos componentes de Symfony2 y Twig. Añádelo como dependencia a tu archivo composer.json:

"require": {
    "symfony/twig-bridge": "2.1.*",
}

Cuando está presente el TwigServiceProvider te proporcionará las siguientes capacidades adicionales:

  • UrlGeneratorServiceProvider: Si estás usando el UrlGeneratorServiceProvider, tendrás acceso a las funciones path() y url(). Puedes encontrar más información en la documentación de enrutado de Symfony2.
  • TranslationServiceProvider: Si estás usando el TranslationServiceProvider, obtendrás las funciones trans() y transchoice() para traducción en plantillas Twig. Puedes encontrar más información en la documentación de traducción de Symfony2.
  • FormServiceProvider: Si estás usando el FormServiceProvider, recibirás un conjunto de ayudantes para trabajar con formularios en plantillas. Puedes encontrar más información en la referencia de formularios de Symfony2.
  • SecurityServiceProvider: Si estás usando el SecurityServiceProvider, tendrá acceso a la función is_granted() en las plantillas. Puedes encontrar más información en la documentación de Seguridad de Symfony2

Uso

El proveedor Twig ofrece un servicio twig:

$app->get('/hello/{name}', function ($name) use ($app) {
    return $app['twig']->render('hello.twig', array(
        'name' => $name,
    ));
});

Esto reproducirá un archivo llamado views/hola.twig.

En cualquier plantilla de Twig, la variable app se refiere al objeto Aplicación. Para que puedas acceder a cualquier servicio desde tu vista. Por ejemplo, para acceder a $app['request']->getHost(), sólo tienes que poner esto en tu plantilla:

{{ app.request.host }}

También se registra una función render para ayudarte a reproducir otro controlador desde una plantilla:

{{ render(app.request.baseUrl ~ '/sidebar') }}

{# o si también estás usando UrlGeneratorServiceProvider con el SymfonyBridgesServiceProvider #}
{{ render(url('sidebar')) }}

Nota

Debes prefijar la app.request.baseUrl para reproducir llamadas para asegurarte de que el render trabaja al desplegar un subdirectorio del docroot.

Peculiaridades

Silex\Application\TwigTrait añade los siguientes atajos:

  • render: Reproduce una vista con los parámetros suministrados y devuelve un objeto Respuesta.
return $app->render('index.html', ['name' => 'Fabien']);

$response = new Response();
$response->setTtl(10);

return $app->render('index.html', ['name' => 'Fabien'], $response);
// secuencia una vista
use Symfony\Component\HttpFoundation\StreamedResponse;

return $app->render('index.html', ['name' => 'Fabien'], new StreamedResponse());

Personalizando

Puedes configurar el entorno Twig antes de usarlo extendiendo el servicio twig:

$app['twig'] = $app->share($app->extend('twig', function($twig, $app) {
    $twig->addGlobal('pi', 3.14);
    $twig->addFilter('levenshtein', new \Twig_Filter_Function('levenshtein'));

    return $twig;
}));

Para más información, consulta la documentación de Twig.

Bifúrcame en GitHub