Helper / HelperObject
概要
Helper および HelperObject はノードの構築と出力をさらに簡略化するための API です. 例えば REST API を提供する Web サービスを開発する場合など, 似たようなフォーマットの XML 出力をする機能が多数存在するようなケースで役に立つでしょう.
HTML を生成する場合は Html という専用のユーティリティクラスが存在するので, そちらを使うことをお勧めします.
基本的な使い方
以下のような流れでノードを生成・出力します.
- Builder オブジェクトを指定して Helper オブジェクトを作成します.
- Helper の createObject() メソッドを使い, HelperObject オブジェクトを作成します.
- 生成した HelperObject の append() や attr() などのメソッドを使ってノードの中身を構築します. jQuery のようにメソッドチェインを利用して簡潔な記述が出来ます.
- write() メソッドでそのノードをマークアップして出力します.
HelperObject とは任意のノードをラップして糖衣構文を備えた Component です. createObject() の引数に文字列を指定することで, その文字列を要素名とする要素をあらわす HelperObject が生成されます.
サンプルコードを以下に掲載します.
- $tag1 = $helper->createObject("tag")->attr("id", 1)->append("First")->append("Second")->append("Third");
- $tag2 = $helper->createObject("tag")->attr("id", 2)->append("Fourth")->append("Fifth");
- $root = $helper->createObject("root")->append($tag1)->append($tag2);
- echo $root->write();
- /*
- Output:
- <root>
- <tag id="1">
- First
- Second
- Third
- </tag>
- <tag id="2">
- Fourth
- Fifth
- </tag>
- </root>
- */
EmptyElement と ContainerElement の出し分け
Helper を生成する際の引数で, 要素名によって空要素にするかどうかを設定することが出来ます. 以下のサンプルでは tag2, tag4 のみ空要素として扱うようにしています.
- echo $helper->createObject("root")
- ->append($helper->createObject("tag1"))
- ->append($helper->createObject("tag2"))
- ->append($helper->createObject("tag3"))
- ->append($helper->createObject("tag4"))
- ->write();
- /*
- Output:
- <root>
- <tag1></tag1>
- <tag2 />
- <tag3></tag3>
- <tag4 />
- </root>
- */
append と appendTo の違い
HelperObject にはノードを追加する手段として append() と appendTo() の 2 種類があります. append() が呼び出し元のノードの中に引数のノードを追加するのに対して, appendTo() は引数のノードの中に呼び出し元のノードを追加します. 以下の 2 種類のコードは同じ結果となります.
- // append を使う場合
- $tag1 = $helper->createObject("tag")->append("Test 1")->append("Test 2");
- $tag2 = $helper->createObject("tag")->append("Test 3")->append("Test 4");
- $root = $helper->createObject("root")->append($tag1)->append($tag2);
- // appendTo を使う場合
- $root = $helper->createObject("root");
- $tag1 = $helper->createObject("tag")->append("Test 1")->append("Test 2")->appendTo($root);
- $tag2 = $helper->createObject("tag")->append("Test 3")->append("Test 4")->appendTo($root);
- Prev: Component (その他のパーツ)
- Next: Html (HTML 出力専用クラス)