Programmer's Reference Guide

Zend_Form_Decorator による独自のフォームマークアップの作成

Zend Framework に同梱されている標準のフォーム要素

Zend Framework には標準でいくつかの具象要素クラスが組み込まれており、 HTML フォーム要素の大半を網羅しています。 そのほとんどは特定のビューヘルパーを指定して要素をデコレートするだけのものですが、 追加機能を提供しているものもあります。 ここでは、標準の要素クラスとその機能についての説明をまとめます。

Zend_Form_Element_Button

HTML の button 要素を作成する際に使用します。 Zend_Form_Element_ButtonZend_Form_Element_Submit を継承して独自の機能を追加したものです。 'formButton' ビューヘルパーでデコレートを行います。

submit 要素と同様、要素のラベルを表示時の値として使用します。 つまり、ボタンのテキストを設定するにはその要素の value を設定します。 翻訳アダプタが存在するときは、ラベルも翻訳されます。

ラベルも要素の一部なので、button 要素は ViewHelper デコレータと DtDdWrapper デコレータのみを使用します。

フォームの表示や検証の後で、 そのボタンが押されたかどうかを調べたい場合は isChecked() メソッドを使用します。

Zend_Form_Element_Checkbox

HTML のチェックボックスは指定した値を返すことができます。 しかし、基本的には boolean として扱います。 チェックされている場合はその値が送信され、 チェックされていない場合はなにも送信されません。 内部的に、Zend_Form_Element_Checkbox はこの状態を強制します。

デフォルトでは、チェックされているときの値は '1' でチェックされていないときの値は '0' です。 使用する値を指定するには、アクセサ setCheckedValue() および setUncheckedValue() をそれぞれ使用します。内部的には、この値を設定すると、 渡された値が checked 値と一致する場合はその値を設定しますが、 それ以外の値が渡された場合は unchecked 値を設定します。

さらに、値を設定するとチェックボックスの checked プロパティも設定されます。 この内容を確認するには、isChecked() を使用するか、単純にそのプロパティにアクセスします。 setChecked($flag) メソッドを使用すると、 フラグの状態を設定すると同時に checked 値あるいは unchecked 値のいずれか適切なほうを要素の値として設定します。 チェックボックス要素のチェック状態を設定するときには、 このメソッドを使用してプロパティが適切に設定されるようにしましょう。

Zend_Form_Element_Checkbox は 'formCheckbox' ビューヘルパーを使用します。 値としては常に checked 値を使用します。

Zend_Form_Element_Hidden

Hidden 要素はただ単にデータを送信するだけのもので、 ユーザはその値を変更してはいけません。 Zend_Form_Element_Hidden は、この機能を 'formHidden' ビューヘルパーで実現します。

Zend_Form_Element_Hash

この要素は CSRF 攻撃からフォームを保護するものです。 送信されたデータがもとのフォームのユーザセッションからのものである (悪意のあるスクリプトからのものではない) ことを保証できるようにします。 これを実現するために、フォームにハッシュ要素を追加して あとでそのハッシュを検証するようにしています。

ハッシュ要素の名前は一意なものでなければなりません。 この要素ではオプション salt を使うことを推奨します。 名前が同じでも salt が異なればハッシュは衝突しません。

<?php
$form->addElement('hash', 'no_csrf_foo', array('salt' => 'unique'));
?>

salt は、後から setSalt($salt) メソッドを使って設定することもできます。

内部的には、この要素は一意な ID を Zend_Session_Namespace を用いて保存しており、 送信されたときにその内容 (TTL が期限切れになっていないかどうか) をチェックしています そして、'Identical' バリデータを使用して、 送信されたハッシュと保存されているハッシュを比較します。

'formHidden' ビューヘルパーを使用して要素をフォームにレンダリングします。

Zend_Form_Element_Image

画像もフォーム要素として使用することができます。 これを用いると、フォームのボタンにグラフィカルな要素を指定したりすることができます。

この要素には、元となる画像が必要です。 Zend_Form_Element_Image では、それを setImage() アクセサ (あるいは設定キー 'image') で設定します。 また、画像を submit したときに使用する値は、 setImageValue() アクセサ (あるいは設定キー 'imageValue') でオプションとして設定することができます。 その要素に設定された値が imageValue とマッチした場合、アクセサ isChecked() は true を返します。

Image 要素はその value を元画像として使用し、 Image デコレータ でレンダリングを行います (それ以外に標準のデコレータ Errors、HtmlTag および Label も使用します)。 オプションのタグを Image デコレータに指定すると、 それで image 要素をラップすることができます。

Zend_Form_Element_MultiCheckbox

関連する複数のチェックボックスをひとまとめにし、 結果をグループ化して扱いたいこともあるでしょう。ちょうど Multiselect に似ていますが、ドロップダウンリストではなく チェックボックス形式で表示させたいのです。

Zend_Form_Element_MultiCheckbox は それを行うためのものです。Multi 要素を継承したその他の要素を同様に、 選択肢のリストを指定してそれらを同じ方法で検証することができます。 'formMultiCheckbox' ビューヘルパーを使用して、 フォームの送信内容を配列で返すようにします。

チェックボックスのオプションを操作するには、 次のメソッドを使用します。

  • addMultiOption($option, $value)

  • addMultiOptions(array $options)

  • setMultiOptions(array $options) (既存のオプションを上書きします)

  • getMultiOption($option)

  • getMultiOptions()

  • removeMultiOption($option)

  • clearMultiOptions()

Zend_Form_Element_Multiselect

XHTML の select 要素には 'multiple' 属性を指定することができます。 これは、普通の要素ではなく複数項目を選択できる要素を表します。 Zend_Form_Element_Multiselect は、 Zend_Form_Element_Select を継承して multiple 要素を 'multiple' に設定したものです。基底クラス Zend_Form_Element_Multi を継承したその他のクラスと同様、以下のメソッドでオプションを操作することができます。

  • addMultiOption($option, $value)

  • addMultiOptions(array $options)

  • setMultiOptions(array $options) (既存のオプションを上書きします)

  • getMultiOption($option)

  • getMultiOptions()

  • removeMultiOption($option)

  • clearMultiOptions()

フォームや要素に翻訳アダプタが登録されている場合は、 表示時にオプションの値が翻訳されます。

Zend_Form_Element_Password

Password 要素は、基本的には通常の text 要素と同じです。 しかし、フォームの再描画時やエラーメッセージなどに 入力内容を表示させないようにします。

Zend_Form_Element_Password は、これを実現するために 各バリデータ上で setObscureValue(true) (検証エラーの際のメッセージでパスワードを表示させない) をコールし、'formPassword' ビューヘルパー (渡された値を表示しない) を使用します。

Zend_Form_Element_Radio

Radio 要素は、いくつかの選択肢を指定してその中から ひとつを選ばせるためのものです。 Zend_Form_Element_Radio は規定クラス Zend_Form_Element_Multi を継承したもので、 複数のオプションを指定することができます。そして、それを表示するために formRadio ビューヘルパーを使用します。

Multi 要素基底クラスを継承したその他のクラスと同様、 以下のメソッドでラジオボタンの表示オプションを操作することができます。

  • addMultiOption($option, $value)

  • addMultiOptions(array $options)

  • setMultiOptions(array $options) (既存のオプションを上書きします)

  • getMultiOption($option)

  • getMultiOptions()

  • removeMultiOption($option)

  • clearMultiOptions()

Zend_Form_Element_Reset

Reset ボタンはフォームの入力内容をクリアするために使用します。 データは送信されません。しかし、表示時の役割があるため、 標準要素のひとつとして組み込まれています。

Zend_Form_Element_ResetZend_Form_Element_Submit を継承しています。ボタンの表示時にはラベルを使用し、 翻訳アダプタが存在する場合はそれが翻訳されます。 この要素が使用するデコレータは 'ViewHelper' と 'DtDdWrapper' のみです。 この要素にはエラーメッセージがなく、またラベルも必須ではないからです。

Zend_Form_Element_Select

セレクトボックスは、指定したデータの中から選択させたいときに使用するものです。 Zend_Form_Element_Select は、 セレクトボックスをお手軽に作成します。

Multi 要素継承したその他のクラスと同様、 以下のメソッドでオプションを操作することができます。

  • addMultiOption($option, $value)

  • addMultiOptions(array $options)

  • setMultiOptions(array $options) (既存のオプションを上書きします)

  • getMultiOption($option)

  • getMultiOptions()

  • removeMultiOption($option)

  • clearMultiOptions()

Zend_Form_Element_Select は 'formSelect' ビューヘルパーでデコレートを行います。

Zend_Form_Element_Submit

Submit ボタンはフォームの内容を送信するための要素です。 複数の submit ボタンを使用することもできます。 どの submit ボタンでデータを送信したかによって、 どのアクションを実行するのかを切り替えることができます。 Zend_Form_Element_Submit では、この判断をしやすくするために isChecked() メソッドを用意しています。 フォームから送信される submit ボタンはひとつだけなので、 各 submit 要素に対してこのメソッドをコールすることで どのボタンが押されたのかを判断することができます。

Zend_Form_Element_Submit はラベルを submit ボタンの "値" として使用します。翻訳アダプタが存在する場合はこれを翻訳します。 isChecked() は、送信された値をこのラベルと比較し、 そのボタンが押されたのかどうかを判断します。

ViewHelper デコレータと DtDdWrapper デコレータを使用して要素をレンダリングします。label デコレータは使用しません。要素のレンダリング時にはボタンのラベルを使用するからです。 また、一般的には submit 要素にはエラーを関連付けません。

Zend_Form_Element_Text

最もよく用いられているフォーム要素は text 要素です。 これはテキスト入力用の要素で、大半の入力項目に適しています。 Zend_Form_Element_Text は、単純に 'formText' ビューヘルパーを使用して要素を表示します。

Zend_Form_Element_Textarea

Textarea は大量のテキストを入力させるために使用します。 テキストの量に制限を設けません (サーバや PHP の設定による制限は除きます)。 Zend_Form_Element_Textarea は 'textArea' ビューヘルパーを使用して要素とその値を表示します。


Zend_Form_Decorator による独自のフォームマークアップの作成
blog comments powered by Disqus

Select a Version

Languages Available

Components

Search the Manual