Я использую силикатный и пытаюсь использовать Intl
расширения для Twig, но я получаю следующее сообщение об ошибке при попытке использовать localizeddate
фильтр:Silex не будет загружать Twig расширения
The filter "localizeddate" does not exist in "games.html"
Согласно these instructions, мой 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
не существует.
Если я нахожу RuntimeException
в конструкторе класса Twig_Extensions_Extension_Intl
, он также не отображается, поэтому кажется, что расширение никогда не загружается в первую очередь. Эта строка может быть найдена в файле autoload_namespaces.php
: 'Twig_Extensions_' => array($vendorDir . '/twig/extensions/lib')
.
Я попытался добавить базовую Twig_SimpleFilter
таким же образом, она не работает, либо, так что кажется, как я пытаюсь добавить это просто неправильно, но это так, как я нахожу везде ...
Мое лучшее предположение заключается в том, что служба 'twig' инициализируется до применения расширения. Есть ли что-нибудь между вызовом регистра и вызовом расширения? –
Между ними, к сожалению, нет ничего. – PLPeeters
Единственное, что я могу придумать, это то, что служба перезаписывается позже. Попробуйте выбросить исключение сразу после '$ twig-> addExtension()' Тогда сразу под вызовом расширения do '$ app ['twig'];' для создания экземпляра службы. Посмотрите, генерируется ли исключение. Если это так, то что-то еще перезаписывает службу «twig» по линии. –