Синтаксис ошибки 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);
}));