Zend_Configを使ったフォームの作成
先程紹介した「Zend_Form とフォーム要素の作成」では、Zend_Formのインスタンスを作成した後、addElementメソッドを利用してフォーム要素を作成・設定・追加していました。しかし、大きなフォームを扱う場合など、このようなコードが長く続くとコード全体の見通しが悪くなります。
そこで、Zend_Formでは設定ファイルを利用してフォームを作成することができます。これには、まずZend_Configで設定を読み込みます。ここでは設定ファイルにXMLファイルを利用した例を見てみます。
まずXMLの設定ファイルを眺めてみます:
<?xml version="1.0"?>
<configdata>
<configTest>
<codezine>
<action>/index/hello</action>
<method>post</method>
<elements>
<user>
...
</user>
<checkHash>
<type>hash</type>
</checkHash>
<submit>
<type>submit</type>
<options>
<label>Submit</label>
</options>
</submit>
</elements>
</codezine>
</configTest>
</configdata>
この設定ファイルではconfigdataがルートとなっており、その子にconfigTestが、孫にcodezineがあります。このうち、まずconfigdataが、この部分がZend_Configに読み込まれるべき設定であることを表しています。次のconfigTestとcodezineは自由につけて良い部分で、configTestが今回利用する設定を、codezineがフォームの設定が書いている場所となっています。これらはそれぞれZend_Config_XmlとZend_Formのコンストラクタに、次のように与えます:
require_once 'Zend/Config/Xml.php';
$config = new Zend_Config_Xml('c:\codezine\zendapps\test.xml',
'configTest');
$form = new Zend_Form($config->codezine);
その後に続くactionとmethodはZend_FormのsetActionとsetMethodに対応するものです。フォーム要素に対応する記述はelementsの下に置きます。ここの下の記述は次のようになります:
<フォーム要素名>
<type>種類</type>
<options>
<label>ラベル</label>
<validators>
<Validator名>
<validator>Validator種類</validator>
<options>
(Validatorのオプション)
</options>
</Validator名>
...
</validators>
<filters>
<Filter名>
<filter>Filter種類</filter>
<options>
(Filterのオプション)
</options>
</Filter名>
...
</filters>
</options>
</フォーム要素名>
これを表示したものは次のようになっています。

Zend_Configには、この他にINI形式で書かれた設定を読み込むためのZend_Config_Iniがあります。こちらの利用方法もZend_Config_Xmlとほぼ同じです:
require_once 'Zend/Config/Ini.php';
$config = new Zend_Config_Ini('c:\codezine\zendapps\test.ini',
'configTest');
$form = new Zend_Form($config->codezine);
設定ファイルの中身は次のようになります:
[configTest] codezine.action = /index/hello codezine.method = post codezine.elements.user.type = text codezine.elements.user.options.label = Your name codezine.elements.user.options.validators.alnum.validator = alnum codezine.elements.user.options.filtors.StringToLower.filter = StringToLower codezine.elements.user.options.required = true codezine.elements.checkHash.type = hash codezine.elements.submit.type = submit codezine.elements.submit.options.label = Submit
こちらも同様に、まず先頭に設定のセクション名(configTest)を記述します。この後は同様に設定の名前(codezine)以下、XMLの場合と同様に '.' で区切って、階層構造にした設定内容を記述します。
ここでは詳細に触れませんが、Zend_Configは設定を管理するためのモジュールで、XML形式およびINI形式で書いてある設定ファイルを読み込むことができます。なお、例では設定ファイルの位置を絶対パスで指定していますが、パスを省略した場合ではトップレベルのPHPが実行されているディレクトリを探します(この場合は「C:\codezine\htdocs」)。そのため、この場合では相対パス「..\zendapps\test.xml」で指定することもできます。
今回のまとめ
今回はZend_Formの利用方法を一通り触れてみました。次回も引き続きZend_Formについて、フォーム要素をグループ化して扱う方法(Display Groups、Sub Forms)と、Zend_Formの表示を変更する仕組み(Decorator)を中心に、今回紹介できなかったZend_Formの機能について解説する予定です。また、Zend Framework 1.6.0に対応した機能もいくつか紹介できる予定です。
