Usando uma function personalizada em twig

No meu modelo, eu quero enviar o fuso horário do servidor.

Meu modelo tem algo como

{{ getservertimezone }} 

Então, na configuração services.yml para esse pacote, eu tenho

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

E meu SomeTemplateHelper parece

 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'; } } 

Mas eu não posso chamar esse método a menos que seja usado como um filtro {{ someval | getservertimezone }} {{ someval | getservertimezone }} , existe uma maneira de fazer uma chamada {{ getservertimezone() }} ?

Use getFunctions() vez de getFilters()

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

Os filtros Twig são usados ​​para filtrar algum valor.

 {{ "some value" | filter_name_here }} 

Btw, você pode definir ambos os filtros e funções na mesma class.

Em vez de getFilters , substitua getFunctions e use Twig_Function_Method vez de Twig_Filter_Method .

Nas versões mais recentes do Twig, ele deveria estar usando Twig_SimpleFunction em vez de Twig_Function_Method e Twig_SimpleFilter em vez de Twig_Filter_Method, uma vez que o Twig _ * _ Method está obsoleto (eu uso o Twig v. 1.24.0 juntamente com o Symfony 2.8.2)