symfonytwigtransclusion

Check if template exists before rendering


is there a way to check if twig template exists before calling to render? A try catch block seems not to work, at least in dev environment, and plus, I prefer a check than the cost of an exception.

This class TwigEngine has an exists() method, but didn't find examples on use.


Solution

  • The service holding the twig engine if configured as default is 'templating'.

    Inside your Controller do the following:

    if ( $this->get('templating')->exists('AcmeDemoBundle:Foo:bar.html.twig') ) {
         // ...
    }
    

    The alternative would be catching exception the render() method throws like this:

     try {
          $this->get('templating')->render('AcmeDemoBundle:Foo:bar.html.twig')
      } catch (\Exception $ex) {
         // your conditional code here.
      }
    

    In a normal controller ...

    $this->render('...')
    

    is only an alias for ...

    $this->container->get('templating')->renderResponse($view, $parameters, $response);
    

    ... while ...

    $this->get('...') 
    

    ... is an alias for

    $this->container->get('...')
    

    Have a look at Symfony\FrameworkBundle\Controller\Controller.