for asset php symfony twig silex

php - asset - Silex-Twig_Error_Syntax: la función "ruta" no existe



twig project (2)

Es de esperar que esto ayude a los futuros espectadores, ya que muchos han publicado esta pregunta sin una respuesta sólida, así que aquí hay uno.

Es literalmente que necesita UrlGeneratorServiceProvider() registrado

$app->register(new UrlGeneratorServiceProvider());

Además , como menciona umpirsky en los comentarios, necesitas symfony/twig-bridge instalado a través del compositor.

No necesita agregar su propia función. Necesita TwigServiceProvider() y UrlGeneratorServiceProvider() antes de cargar su plantilla UrlGeneratorServiceProvider() . Esto no es fácilmente evidente a partir de la documentación.

De acuerdo con la documentación de Silex :

Symfony proporciona un puente Twig que proporciona una integración adicional entre algunos componentes de Symfony2 y Twig. Agréguelo como una dependencia de su archivo composer.json.

Incluyo lo siguiente en mi archivo composer.json :

{ "require": { "silex/silex": "1.*", "twig/twig": ">=1.8,<2.0-dev", "symfony/twig-bridge": "2.3.*" } }

TwigServiceProvider() manera:

$app->register(new Silex/Provider/TwigServiceProvider(), array( ''twig.path'' => __DIR__ . ''/views'' ));

Estoy intentando usar el método twig path() así:

<a href="{{ path(''logout'') }}">Log out</a>

El error que obtengo es el siguiente:

Twig_Error_Syntax: la función "ruta" no existe

¿Por qué recibo este error?

  • He intentado cambiar las versiones para comprobar si es un problema de versión
  • Un comentario de Google Groups sugirió ''registrar'' el proveedor de twig bridge, pero esto no existe
  • No quiero tener que usar: app.url_generator.generate en todas mis plantillas en su lugar

Una solución temporal que he encontrado:

Asegúrese de que el UrlGeneratorServiceProvider() esté registrado:

$app->register(new UrlGeneratorServiceProvider());

Crea una nueva función para twig para path() :

$app[''twig'']->addFunction(new /Twig_SimpleFunction(''path'', function($url) use ($app) { return $app[''url_generator'']->generate($url); }));

¡No debería tener que hacer esto! ¿Cómo puedo hacer que esto funcione correctamente ?


Yo también tuve que crear una nueva función para twig para path() , pero la mejoré un poco para manejar un número variable de argumentos para permitir pasar matrices en la plantilla twig:

$app[''twig'']->addFunction(new /Twig_SimpleFunction(''path'', function(...$url) use ($app) { return call_user_func_array(array($app[''url_generator''], ''generate''), $url); }));