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に対応した機能もいくつか紹介できる予定です。