カスタムヘルパーを開発するのは簡単です。ヘルパークラスを作成、HelperLocatorに登録しテンプレートで使用します。
ヘルパーを書くには、Helperクラスを継承し、__invoke()
メソッドを好きなパラメータで実装してください。このメソッドは、適切にエスケープされた文字列を返すようにします。
以下は、文字列をROT-13するためのヘルパーです。
namespace My\Helper;
use Qiq\Helper;
class Rot13 extends Helper
{
public function __invoke(string $str) : string
{
return $this->escape->h(str_rot13($str));
}
}
ヘルパークラスができたので、その呼び出し可能なファクトリをHelperLocatorに登録する必要があります。(呼び出し可能なファクトリを登録すると、ヘルパーが呼ばれたときにだけHelperLocatorがヘルパーを遅延ロードするようになります)。登録キーはQiqヘルパー名、あるいはテンプレート内でそのヘルパーに使用する、PHPの$this
ヘルパーメソッドとなります
$tpl = Template::new(...);
$helperLocator = $tpl->getHelperLocator();
$helperLocator->set(
'rotOneThree',
function () use ($helperLocator) {
return new \My\Helper\Rot13($helperLocator->escape());
}
);
HelperLocatorにすでにEscapeのインスタンスがある状態でHelperクラスを構築する必要があることに注意してください。
このヘルパーは、Qiqコードとしてテンプレートで使用することができます。
<p>{{= rotOneThree ('Uryyb Jbeyq!') }}</p>
あるいはPHPで
<p><?= $this->rotOneThree('Uryyb Jbeyq!') ?></p>
いずれにせよ、出力は同じになります。
<p>Hello World!</p>