Как зарегистрировать фильтры (бывшие помощники) в Латте?

Я хотел бы создать свой собственный фильтр для Латте шаблонизатор. В их документации есть пример, но он не описывает, как его зарегистрировать в докладчике.

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

Бьюсь об заклад, будет простой способ получить экземпляр Latte \ Engine внутри докладчика, но я не уверен, как.

6

Решение

Фильтры могут быть зарегистрированы через 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);
}
}
7

Другие решения

В докладчике есть экземпляр 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 который является родителем всех остальных докладчиков, но вы можете зарегистрировать его только в желающем докладчике и ускорить работу приложения.

3

В дополнение к ответу @Nortys.

Иногда полезно ввести некоторые данные из Presenter в анонимную функцию:

<?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);
});
}
}
?>
1
По вопросам рекламы [email protected]