Latte テンプレート エンジン用の独自のフィルタを作成したいと考えています。ドキュメントに例がありますが、プレゼンター内に登録する方法は説明されていません。
$latte = new Latte\Engine;
$latte->addFilter('myFilter', function ($s) {
return someMagic($s)
});
プレゼンター内で Latte\Engine のインスタンスを取得する簡単な方法があると思いますが、その方法はわかりません。
Latte テンプレート エンジン用の独自のフィルタを作成したいと考えています。ドキュメントに例がありますが、プレゼンター内に登録する方法は説明されていません。
$latte = new Latte\Engine;
$latte->addFilter('myFilter', function ($s) {
return someMagic($s)
});
プレゼンター内で Latte\Engine のインスタンスを取得する簡単な方法があると思いますが、その方法はわかりません。
フィルタも登録できconfig.neon
ます。
services:
nette.latteFactory:
setup:
- addFilter(abs, @App\Latte\AbsFilter)
- App\Latte\AbsFilter
フィルタ クラスは次のようになります。
namespace App\Latte;
class AbsFilter extends \Nette\Object
{
/**
* @param int $number
* @return int
*/
public function __invoke($number)
{
return abs($number);
}
}
プレゼンターには、Latte\Engine
利用可能なインスタンスがある$this->template
ため、次のようにフィルターを登録するだけです。
<?php
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
public function beforeRender()
{
// register filters
$this->template->addFilter('myFilter', function ($s) {
// don't forget to set your own magic
return someMagic($s);
});
}
}
?>
他のすべてのプレゼンターの親であるを使用して例を投稿しBasePresenter
ますが、必要なプレゼンターにのみ登録して、アプリケーションを高速化できます。
@Nortysの回答に加えて。
プレゼンターから無名関数にデータを挿入すると便利な場合があります。
<?php
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
public function beforeRender()
{
$locale = 'en';
// register filters
$this->template->addFilter('myFilter', function ($s) use ($locale) {
// don't forget to set your own magic
return someMagic($s, $locale);
});
}
}
?>