В моем шаблоне я хочу вывести часовой пояс сервера.
Мой шаблон имеет что-то вроде
{{ 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)