Использование пользовательской функции в веточке

В моем шаблоне я хочу вывести часовой пояс сервера.

Мой шаблон имеет что-то вроде

{{ getservertimezone }} 

Тогда в config.sys службы для этого пакета я имею

 my.twig.extension: class: My\WebsiteBundle\Extensions\Twig\SomeTemplateHelper tags: - { name: twig.extension } 

И мой SomeTemplateHelper выглядит

 namespace My\WebsiteBundle\Extensions\Twig; class SomeTemplateHelper extends \Twig_Extension { public function getFilters() { return array( 'getservertimezone' => new \Twig_Filter_Method($this, 'getServerTimeZone'), ); } public function getServerTimeZone() { if (date_default_timezone_get()) { return date_default_timezone_get(); } else if (ini_get('date.timezone')) { return ini_get('date.timezone'); } else { return false; } } public function getName() { return 'some_helper'; } } 

Но я не могу назвать этот метод, если он не используется как фильтр {{ someval | getservertimezone }} {{ someval | getservertimezone }} , есть ли способ просто вызвать вызов {{ getservertimezone() }} ?

Используйте getFunctions() вместо getFilters()

 public function getFunctions() { return array( new \Twig_SimpleFunction('server_time_zone', array($this, 'getServerTimeZone')), ); } 

Фильтры Twig используются для фильтрации некоторого значения.

 {{ "some value" | filter_name_here }} 

Btw, вы можете определить как фильтры, так и функции в одном классе.

Вместо getFilters переопределите getFunctions и используйте Twig_Function_Method вместо Twig_Filter_Method .

В новых версиях Twig он должен использовать Twig_SimpleFunction вместо Twig_Function_Method и Twig_SimpleFilter вместо Twig_Filter_Method, так как Twig _ * _ Method устарели (я использую Twig v. 1.24.0 вместе с Symfony 2.8.2)