初めに
Flowでは、Fluidというテンプレートエンジンが採用されており、ViewHelperと呼ばれる機能が使えます。今回は、このViewHelperについて解説していきます。
ViewHelperとは
こちらの記事で、ViewHelperを定義することでHTML内で使える独自のタグを作成することができると紹介しました。今回は、独自のViewHelperを作成してみようと思います。
使い方
作り方は簡単です。
以下のような形で書きます。
<?php
namespace Neos\Welcome\ViewHelper;
class TestViewHelper extends \Neos\FluidAdaptor\Core\ViewHelper\AbstractViewHelper
{
public function initializeArguments() {
$this->registerArgument('argument', 'string', 'The argument to output', true, 'default value');
}
/**
* @return string
*/
public function render()
{
return 'Hello World! and '.$this->arguments['argument'];
}
}
ポイントは以下です。
- AbstractViewHelperを継承する
- initializeArguments内でViewHelperに渡す引数を定義できる
- render()メソッドを定義し、HTMLで呼び出された際に返す値を定義する
registerArgumentメソッドを使うとViewHelperに渡す引数を定義できます。
右から、「変数名」「型」「説明」「必須 / 非必須」「デフォルト値」「スケープの有無」を設定することができます。
HTML側はこんな感じです。
{namespace original=Neos\Welcome\ViewHelpers}
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>単純なHTMLファイル</title>
</head>
<body>
<p>
<original:test argument="test"/>
</p>
</body>
</html>
ポイントは以下です。
- 作成したViewHelperの名前空間のエイリアスを定義する
- エイリアスとViewhelper名を使ってタグを定義する
- 設定した引数を記載する
こんな感じで画面に表示されました。
簡単ですね!
使いどころ
具体的な使いどころを一つ紹介します。
セッションの取得
共通のヘッダーなどで、セッション情報を利用して情報を出しわけたいなどあるかと思います。
その際、セッションをAPIレスポンスで返すのではなく、ViewHelperで定義しておくことで、共通ヘッダーを簡単に作成することができます。
<?php
namespace Neos\Welcome\ViewHelpers;
use Neos\Flow\Annotations as Flow;
use Neos\Welcome\Session\LoginSession;
class SessionViewHelper extends \Neos\FluidAdaptor\Core\ViewHelper\AbstractViewHelper
{
/**
* @Flow\Inject
* @var LoginSession
*/
protected $loginSession;
/**
* @return string
*/
public function render()
{
return 'User ID: ' . $this->loginSession->getUserId() . ' User Type: ' . $this->loginSession->getUserType();
}
}
以下のようになります。
セッションの使い方はこちらの記事で解説してるので、是非ご覧ください。
終わりに
今回はViewHelperについて解説しました。
FluidのViewHelperは簡単に実装できるうえに、読みみやすいのが良いですね。
バックエンドの人間としては、細かい条件などをPHPで書けるのがうれしいです。
ここまで読んでいただきありがとうございました!