twig
枝を伸ばす
サーチ…
備考
カスタムフィルタ/関数の追加
ここに、新しいフィルタ/関数をtwig
に追加する方法の例がありますが、
Twig_Functionを追加するためのTwig_Function
は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
クラスの中に、すべてのカスタム関数/ filters / tests / ...をグループ化することができます:
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 - 拡張されたtwig拡張クラスを使用する
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 }}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow