TwigServiceProvider =================== The *TwigServiceProvider* provides integration with the `Twig `_ template engine. Parameters ---------- * **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). Services -------- * **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 the ``twig.templates`` options. You can also replace the loader completely. Registering ----------- .. code-block:: php $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: .. code-block:: json "require": { "twig/twig": ">=1.8,<2.0-dev" } Symfony2 Components Integration ------------------------------- 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: .. code-block:: json "require": { "symfony/twig-bridge": "2.1.*", } When present, the ``TwigServiceProvider`` will provide you with the following additional capabilities: * **UrlGeneratorServiceProvider**: If you are using the ``UrlGeneratorServiceProvider``, you will have access to the ``path()`` and ``url()`` functions. You can find more information in the `Symfony2 Routing documentation `_. * **TranslationServiceProvider**: If you are using the ``TranslationServiceProvider``, you will get the ``trans()`` and ``transchoice()`` 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 the ``is_granted()`` function in templates. You can find more information in the `Symfony2 Security documentation `_. Usage ----- 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: .. code-block:: jinja {{ app.request.host }} A ``render`` function is also registered to help you render another controller from a template: .. code-block:: jinja {{ render(app.request.baseUrl ~ '/sidebar') }} {# or if you are also using UrlGeneratorServiceProvider with the SymfonyBridgesServiceProvider #} {{ 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. Traits ------ ``Silex\Application\TwigTrait`` adds the following shortcuts: * **render**: Renders a view with the given parameters and returns a Response object. .. code-block:: php return $app->render('index.html', ['name' => 'Fabien']); $response = new Response(); $response->setTtl(10); return $app->render('index.html', ['name' => 'Fabien'], $response); .. code-block:: php // stream a view use Symfony\Component\HttpFoundation\StreamedResponse; return $app->render('index.html', ['name' => 'Fabien'], new StreamedResponse()); Customization ------------- 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 `Twig documentation `_.