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);
}));