Синтаксис ошибки Silex - Twig: функция "path" не существует
по словам документация Silex:
Symfony предоставляет мост Twig, который обеспечивает дополнительную интеграцию между некоторыми компонентами Symfony2 и Twig. Добавьте его в зависимость от вашего композитора.файл json.
Я включаю следующее в мой :
{
"require": {
"silex/silex": "1.*",
"twig/twig": ">=1.8,<2.0-dev",
"symfony/twig-bridge": "2.3.*"
}
}
Я зарегистрировать TwigServiceProvider()
вот так:
$app->register(new SilexProviderTwigServiceProvider(), array(
'twig.path' => __DIR__ . '/views'
));
Я пытаюсь использовать веточку path()
метод, как Итак:
<a href="{{ path('logout') }}">Log out</a>
ошибка, которую я получаю, выглядит следующим образом:
Twig_Error_Syntax: функция "path" не существует
почему я получаю эту ошибку?
- я попытался переключить версии, чтобы проверить, является ли это проблемой версии
- один комментарий google groups предложил "зарегистрировать" поставщика моста twig, но этого не существует
- я не хотите должны использовать:
app.url_generator.generate
во всех моих шаблонах вместо
временное решение, которое я нашел:
Обеспечить UrlGeneratorServiceProvider()
зарегистрирован:
$app->register(new UrlGeneratorServiceProvider());
создайте новую функцию для twig для path()
:
$app['twig']->addFunction(new Twig_SimpleFunction('path', function($url) use ($app) {
return $app['url_generator']->generate($url);
}));
я не должен был этого делать!! как я могу заставить это работать правильно?
2 ответов
надеюсь, это поможет будущим зрителям, как многие опубликовали этот вопрос без твердого ответа, так что вот один.
это буквально, что вам нужно UrlGeneratorServiceProvider()
зарегистрированы
$app->register(new UrlGeneratorServiceProvider());
и, как umpirsky упоминает в комментариях, вам нужен symfony/twig-bridge
установлен через composer.
вам не нужно добавлять свою собственную функцию. Вам нужны оба TwigServiceProvider()
и на UrlGeneratorServiceProvider()
зарегистрирован перед загрузкой веточки шаблон. Это не так легко понять из документации.
мне тоже пришлось создать новую функцию для twig for path()
, но я немного улучшил его, чтобы обрабатывать переменное количество аргументов, чтобы разрешить передачу массивов в шаблоне twig:
$app['twig']->addFunction(new \Twig_SimpleFunction('path', function(...$url) use ($app) {
return call_user_func_array(array($app['url_generator'], 'generate'), $url);
}));