出典 : 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
、又はbackflow
1指定します。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
に関する処理を表します。 ↩