El TwigServiceProvider proporciona integración con el motor de plantillas Twig.
$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"
}
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:
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.
Silex\Application\TwigTrait añade los siguientes atajos:
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());
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.