The TwigServiceProvider provides integration with the Twig template engine.
- twig.path (optional): Path to the directory containing twig template files (it can also be an array of paths).
- twig.templates (optional): An associative array of template names to template contents. Use this if you want to define your templates inline.
- twig.options (optional): An associative array of twig options. Check out the twig documentation for more information.
- twig.form.templates (optional): An array of templates used to render forms (only available when the
FormServiceProvider
is enabled).
- twig: The
Twig_Environment
instance. The main way of interacting with Twig. - twig.loader: The loader for Twig templates which uses the
twig.path
and thetwig.templates
options. You can also replace the loader completely.
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__.'/views',
));
Note
Twig comes with the "fat" Silex archive but not with the regular one. If you are using Composer, add it as a dependency to your composer.json
file:
"require": {
"twig/twig": ">=1.8,<2.0-dev"
}
Symfony provides a Twig bridge that provides additional integration between some Symfony2 components and Twig. Add it as a dependency to your composer.json
file:
"require": {
"symfony/twig-bridge": "~2.3"
}
When present, the TwigServiceProvider
will provide you with the following additional capabilities:
- UrlGeneratorServiceProvider: If you are using the
UrlGeneratorServiceProvider
, you will have access to thepath()
andurl()
functions. You can find more information in the Symfony2 Routing documentation. - TranslationServiceProvider: If you are using the
TranslationServiceProvider
, you will get thetrans()
andtranschoice()
functions for translation in Twig templates. You can find more information in the Symfony2 Translation documentation. - FormServiceProvider: If you are using the
FormServiceProvider
, you will get a set of helpers for working with forms in templates. You can find more information in the Symfony2 Forms reference. - SecurityServiceProvider: If you are using the
SecurityServiceProvider
, you will have access to theis_granted()
function in templates. You can find more information in the Symfony2 Security documentation.
The Twig provider provides a twig
service:
$app->get('/hello/{name}', function ($name) use ($app) {
return $app['twig']->render('hello.twig', array(
'name' => $name,
));
});
This will render a file named views/hello.twig
.
In any Twig template, the app
variable refers to the Application object. So you can access any service from within your view. For example to access $app['request']->getHost()
, just put this in your template:
{{ app.request.host }}
A render
function is also registered to help you render another controller from a template:
{{ render(app.request.baseUrl ~ '/sidebar') }}
{# or if you are also using the UrlGeneratorServiceProvider #}
{{ render(url('sidebar')) }}
Note
You must prepend the app.request.baseUrl
to render calls to ensure that the render works when deployed into a sub-directory of the docroot.
Silex\Application\TwigTrait
adds the following shortcuts:
- render: Renders a view with the given parameters and returns a Response object.
return $app->render('index.html', ['name' => 'Fabien']);
$response = new Response();
$response->setTtl(10);
return $app->render('index.html', ['name' => 'Fabien'], $response);
// stream a view
use Symfony\Component\HttpFoundation\StreamedResponse;
return $app->render('index.html', ['name' => 'Fabien'], new StreamedResponse());
You can configure the Twig environment before using it by extending the twig
service:
$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;
}));
For more information, check out the official Twig documentation.