symfony twig transclusion

symfony - Compruebe si la plantilla existe antes de la representación



twig transclusion (5)

¿Hay alguna forma de comprobar si existe una plantilla de ramas antes de llamar a renderizar? Parece que un bloque try catch no funciona, al menos en un entorno de desarrollo, y además, prefiero un cheque que el costo de una excepción.

Esta clase TwigEngine tiene un método exists (), pero no encontró ejemplos de uso.


El servicio de templating se eliminará en futuras versiones de Symfony. La solución a prueba de futuro basada en el servicio twig es:

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


El servicio que contiene el motor twig si está configurado como predeterminado es ''plantilla''.

Dentro de su controlador haga lo siguiente:

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

La alternativa sería atrapar excepciones, el método render () arroja así:

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

En un controlador normal ...

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

es solo un alias para ...

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

... mientras ...

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

... es un alias para

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

Eche un vistazo a Symfony/FrameworkBundle/Controller/Controller .


En caso de que necesite verificar la existencia de la plantilla desde dentro de las plantillas twig, debe usar los métodos include de la matriz, como se describe en la documentation :

{% include [''page_detailed.html'', ''page.html''] %}


Puedes hacerlo de esta manera usando la inyección de dependencia:

use Symfony/Component/Templating/EngineInterface; public function fooAction(EngineInterface $templeEngine) { if ($templeEngine->exists("@App/bar/foo.html.twig")) { // ... } // ... }

Probado con Symfony 3.4.


Tal vez también una opción:

{% include ''AcmeDemoBundle:Foo:bar.html.twig'' ignore missing %}

Ignorar la adición faltante le dice a ramita que simplemente no haga nada, cuando no se encuentra la plantilla.