Silex не будет загружать расширения Twig

0

Я использую Silex и пытаюсь использовать расширение Intl для Twig, но при попытке использовать фильтр localizeddate появляется следующая ошибка:

Фильтр "localizeddate" не существует в "games.html"

В соответствии с этими инструкциями, мой composer.json содержит следующую строку в разделе require:

 "twig/extensions": "~1.1.0"

Мой файл app.php содержит следующее:

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

$app['twig'] = $app->share($app->extend('twig', function($twig, $app) {
    $twig->addExtension(new Twig_Extensions_Extension_Intl($app));

    return $twig;
}));

Наконец, где-то в моем шаблоне games.html это, что вызывает ошибку, описанную выше:

{{ game.start_time|localizeddate('medium', 'none', 'fr') }}

Для тестирования я также попытался с расширением Text, точно так же, как в связанных инструкциях, но сгенерировал такую же ошибку.

Странно, что я могу поместить что-нибудь в функцию, где я добавляю расширение; он никогда не будет генерировать ошибку, если синтаксис действителен. Итак, если я заменил $twig->addExtension(new Twig_Extensions_Extension_Intl($app)) на $twig->addExtension(new Foo()), у Silex, похоже, нет проблемы с ним, хотя класс Foo doesn ' t существует.

Если я выкидываю RuntimeException в конструкторе класса Twig_Extensions_Extension_Intl, он также не отображается, поэтому кажется, что расширение никогда не загружается в первую очередь. Эта линия может быть найдена в autoload_namespaces.php файл, хотя: 'Twig_Extensions_' => array($vendorDir. '/twig/extensions/lib').

Я попытался добавить базовый Twig_SimpleFilter таким же образом, он тоже не работает, поэтому кажется, что я пытаюсь добавить это, просто неправильно, но это так, как я нахожу везде...

Теги:
twig
silex

1 ответ

2
Лучший ответ

Служба твинов переопределяется позже в процессе загрузки приложения. (См. Комментарии к комментариям для шагов отладки). Создается первая ветка, вы расширяете ее и добавляете расширение. Позже веточка определяется снова, но на этот раз добавление не добавляется.

Второе определение переопределяет первое, что является основной проблемой. Запутанная часть состоит в том, что первоначальное расширение никогда не вызвано. Это связано с тем, что Silex фактически не вызывает вашу функцию расширения до тех пор, пока не будет использована служба ветки. Поскольку вы переопределяете это до того, как это произойдет, функция расширения никогда не вызывается. Чтобы отлаживать, вы вызвали $app['twig'] сразу же после того, как вы определили веточку в первый раз и обеспечили, чтобы расширение было запущено. Благодаря процессу устранения, это означает, что услуга веточки становится переопределенной через некоторое время. Вы определили, что это находится в файле конфигурации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню