8

Latte テンプレート エンジン用の独自のフィルタを作成したいと考えています。ドキュメントに例がありますが、プレゼンター内に登録する方法は説明されていません。


$latte = new Latte\Engine;
$latte->addFilter('myFilter', function ($s) {
    return someMagic($s)
});

プレゼンター内で Latte\Engine のインスタンスを取得する簡単な方法があると思いますが、その方法はわかりません。

4

4 に答える 4

8

フィルタも登録でき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);
    }
}
于 2016-01-25T14:08:31.290 に答える
4

プレゼンターには、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ますが、必要なプレゼンターにのみ登録して、アプリケーションを高速化できます。

于 2014-11-07T22:30:25.787 に答える
1

@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);
        });
    }
}
?>
于 2015-12-19T20:37:35.033 に答える