0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PHP】マイナーフレームワーク「Flow」を試してみる~ViewHelper編~

Last updated at Posted at 2024-05-11

初めに

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名を使ってタグを定義する
  • 設定した引数を記載する

こんな感じで画面に表示されました。
簡単ですね!

image.png

使いどころ

具体的な使いどころを一つ紹介します。

セッションの取得

共通のヘッダーなどで、セッション情報を利用して情報を出しわけたいなどあるかと思います。
その際、セッションを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();
    }
}

以下のようになります。

image.png

セッションの使い方はこちらの記事で解説してるので、是非ご覧ください。

終わりに

今回はViewHelperについて解説しました。
FluidのViewHelperは簡単に実装できるうえに、読みみやすいのが良いですね。
バックエンドの人間としては、細かい条件などをPHPで書けるのがうれしいです。

ここまで読んでいただきありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?