出典 : UNICORN FlowXMLについて - デジタルクエスト 開発ブログ様 (執筆:atarun様)
※記事の掲載及び提供に深く感謝します。
Webアプリケーション開発に特化したUNICORNの機能の一つです。
xmlに処理(Flow)を記述していく事により、一連の処理の流れ(フロー)を1つのxmlファイルに定義する事が出来き
面倒なformの復帰や確認画面でのhiddenタグの挿入といった、Webアプリケーションに欠かせない機能の多くをフレームワークが自動的に処理してくれるようになります。
また定義したフローをUNICORNがPHPに変換したものを自動的に作成(autogenerate)してくれます。
xmlで記述していく事に少なからず抵抗がある方もいるかも知れませんが、必要最低限の処理をFlowXMLで記述する事によりUNICORN側で自動的にその他の処理も追加した状態でPHP化してくれるので、慣れれば素早く開発する事が可能になるでしょう。
もちろんPHPのFrameworkなので、直接PHPファイルを作成して処理を記述する事も出来ます。
FlowXMLで使用出来るタグは実に様々です。
下記のタグを理解する事で、より素早く処理を記述する事が出来ます。
sectionを一意に識別するための値です。
autogenerateされたPHPのクラス名に該当します。例)Helloというsectionを宣言します。
<?xml version="1.0" ?>
<xml>
<section id="Hello">
</section>
</xml>
executeが実行される前に実行したい処理はprepend内に記述します。
例)prependの処理が終了した後にexecuteの処理を実行します。
<?xml version="1.0" ?>
<xml>
<section id="Hello">
<prepend>
<!-- 処理を記述 -->
</prepend>
<execute>
<!-- 処理を記述 -->
</execute>
</section>
</xml>
処理を実行します。主な処理はsection配下に記述したexecute内に実装します。
特定のクラスやメソッドの実行にも使用可能です。
例)文字列"hoge"をechoする
<?xml version="1.0" ?>
<xml>
<section id="Hello">
<execute>
<execute val="echo "hoge""/>
</execute>
</section>
</xml>
executeが実行された後に実行したい処理はappend内に記述する
例)
<?xml version="1.0" ?>
<xml>
<section id="Hello">
<execute>
<!-- 処理を記述 -->
</execute>
<append>
<!-- 処理を記述 -->
</append>
</section>
</xml>
“次の処理”“を明示します。
sectionのid、又はbackflow1指定します。sectionへリダイレクトさせるかを宣言します。
true又はfalseを指定します。HTMLのformタグに指定したsectionを遷移先として指定し、formの入力値を引き渡す場合に宣言します。例)
<?xml version="1.0" ?>
<xml>
<section id="Hello">
<execute>
<flow section="Hello-world" redirect="true"/>
</execute>
</section>
<section id="Hello-world">
<execute>
</execute>
</section>
</xml>
varで宣言された変数に代入する値を指定します。arg1、arg2の様に複数指定する事が出来ます。例)Hogeクラスのtestメソッドに文字列"foo"を引数として渡し、結果を変数$barに格納します。
<?xml version="1.0" ?>
<xml>
<section id="Hello">
<execute>
<assign var="bar" class="Hoge" method="test" arg1="'foo'"/>
</execute>
</section>
</xml>
UNICORNの機能であるautorestを利用してDBにSQLを発行します。
authAndExecute又はexecuteを指定します。DBのテーブルを指定します。GET・POST・PUT・DELETEの何れかを指定します。
それぞれSELECT・INSERT・UPDATE・DELETEに該当します。SQLを指定します。
JOIN ORDER OFFSET LIMIT GROUP BY句もここで指定します。
json形式で指定します。例)fooテーブルの一覧をidの降順で20件取得し、結果をbarという変数に代入します。
<?xml version="1.0" ?>
<xml>
<section id="Hello">
<execute>
<rest assign var="bar" execute="authAndExecute" resource="foo" method="GET" params="{"ORDER":"id DESC", "LIMIT":"20"}"/>
</execute>
</section>
</xml>
PHPのif文と同様に条件分岐を行います。
例)条件分岐により変数$hogeに数値を代入し、結果をechoします。
<?xml version="1.0" ?>
<xml>
<section id="Hello">
<execute>
<if var="true" val="$hoge === 'foo'">
<execute var="hoge" val="1"/>
</if>
<elseif var="true" val="$hoge === 'bar'">
<execute var="hoge" val="2"/>
</elseif>
<else>
<execute var="hoge" val="3"/>
</else>
<execute val="echo $hoge"/>
</execute>
</section>
</xml>
key」、値は「変数名+val」で表します。例)配列$hogeをループさせ、そのキーと値をechoします。
<?xml version="1.0" ?>
<xml>
<section id="Hello">
<execute>
<foreach eachas="$hoge">
<execute val="echo $hogekey . ':' . $hogeval"/>
</foreach>
</execute>
</section>
</xml>
※省略可
現在のsection上で表示するhtmlファイルの指定やhtmlのformの値の受け渡しについて指定する事が出来ます。
省略した場合、現在のsectionのidと同名のhtmlファイルがデフォルト値となります。
section
sectionのidを指定します。
htmlのformに入力された値の引き渡し先となるsectionのidを指定します。flowpostformsectionにより渡された値の更に引き渡し先となるsectionのidを指定します。htmlのformに入力された値の復帰先となるsectionのidを指定します。HTTPSプロトコルを適用するかを明示的に指定します。
true又はfalseを指定します。例)
Hello-one:sectionのHello-twoを、formのリクエスト先としてHTMLを描画します。
Hello-two:Hello-oneからリクエストされた値を受取り、確認用のHTMLを描画します。戻り先をsectionのHello-oneとしています。渡し先をsectionのHello-threeとしています。
Hello-three:sectionのHelloで使用しているHTMLファイルを描画します。
<?xml version="1.0" ?>
<xml>
<section id="Hello-one">
<execute>
<view flowpostformsection="Hello-two"/>
</execute>
</section>
<section id="Hello-two">
<execute>
<view confirmflowpostformsection="Hello-three" backflowpostformsection="Hello-one"/>
</execute>
</section>
<section id="Hello-three">
<execute>
<view section="Hello"/>
</execute>
</section>
</xml>
viewで描画されるHTMLに値を渡す事が出来ます。
HTMLのid, class属性の値を指定します。指定方法はCSSと同じです。selectorに代入する値を指定します。例)hello.htmlの<div id="#foo></div>"というタグに"bar"という文字列を埋め込みます。
<?xml version="1.0" ?>
<xml>
<section id="Hello">
<execute>
<flowviewparam selector="#foo" val="`bar`"/>
<view/>
</execute>
</section>
</xml>
backflow処理をキャンセルします。
backflowに設定されている値をクリアします。
htmlにflowpostformsectionerrorという属性を宣言した箇所に文字列を埋め込みます。
例)htmlに"Error"という文字列をエラーメッセージとして渡します。
<?xml version="1.0" ?>
<xml>
<section id="Hello">
<execute>
<flowpostformsectionerror>Error</flowpostformsectionerror>
</execute>
</section>
</xml>
Exceptionを宣言し、処理を終了します。
例)
<?xml version="1.0" ?>
<xml>
<section id="Hello">
<execute>
<exception/>
</execute>
</section>
</xml>
以上がUNICORNのFlowXMLで使える主なxmlタグの一覧になります。
これらのタグとHTML、JavaScriptを用いて非常にスピーディーにUNICORNによる開発を行う事が可能です。
例えばflowのsectionにbackflowを指定する事で、前回の処理を手軽に復帰させる事が出来ます。
backflowとは、現在のsectionの一つ前のsectionに関する処理を表します。 ↩