twig
Расширение веточки
Поиск…
замечания
Twig уже имеет встроенные фильтры и функции , но что, если встроенные функции отсутствуют или вам нужно получить доступ к некоторым функциям PHP
умолчанию в шаблоне
Добавление пользовательских фильтров / функций
Вот пример того, как добавлять новые фильтры / функции в twig
,
синтаксис для добавления Twig_Function
s такой же, как Twig_Filter
, просто измените ключевые слова соответственно
<?php
$twig = new Twig_Environment($loader);
/* You can chain a global function */
$twig->addFilter(new Twig_SimpleFilter('floor', 'floor'));
/* You can specify a custom function */
$twig->addFilter(new Twig_SimpleFilter('money', function($value, $currency, $prefix = false, $decimals = 2, $dec_point = "." , $thousands_sep = ",") {
$value = number_format($value, $decimals, $dec_point, $thousands_sep);
if ($prefix) return $currency.' '.$value;
return $value.' '.$prefix;
});
/* You can chain an object's method */
$twig->addFilter(new Twig_SimpleFilter('foo_bar', array($foo, 'bar')));
Создание Twig_Extension
Вы можете сгруппировать все свои пользовательские функции / фильтры / тесты / ... внутри пользовательского класса Twig_Extension
:
ProjectTwigExtension
class ProjectTwigExtension extends Twig_Extension {
public function getFunctions() {
return array(
new Twig_SimpleFunction('twig_function_name', array($this, 'getTwigFunctionName')),
new Twig_SimpleFunction('twig_function_foo', array($this, 'getTwigFunctionFoo')),
);
}
public function getFilters() {
return array(
new Twig_SimpleFilter('twig_filter_name' , array($this, 'getTwigFilterName')),
new Twig_SimpleFilter('twig_filter_foo' , array($this, 'getTwigFilterFoo')),
);
}
public function getName() {
return 'ProjectTwigExtension';
}
}
Расширение регистра в веточке
$twig = new Twig_Environment($loader);
$twig->addExtension(new ProjectTwigExtension());
Дополнительные параметры можно найти в официальных документах
Простая дата рождения до возраста фильтра
Как ...
1 - используйте класс расширения ветви, который расширяется
use \Twig_Extension
class dobToAge extends \Twig_Extension {
2 - Добавьте соответствующий фильтр, переопределив метод getFilters ()
public function getFilters() {
return array(
'age' => new \Twig_Filter_Method($this, 'getAge'),
);
}
3 - Добавьте некоторую логику, чтобы получить возраст определенной даты рождения
public function getAge($date)
{
if (!$date instanceof \DateTime) {
// turn $date into a valid \DateTime object or let return
return null;
}
$referenceDate = date('01-01-Y');
$referenceDateTimeObject = new \DateTime($referenceDate);
$diff = $referenceDateTimeObject->diff($date);
return $diff->y;
}
}
Затем вызовите фильтр следующим образом:
{{ yourDateOfBirthInstance | age }}