Zend_Form_Element を用いたフォーム要素の作成フォームは、いくつかの要素から構成されています。 これらの要素は、HTML フォームの入力項目に対応します。 Zend_Form_Element は個々のフォーム要素をカプセル化し、 以下の機能を提供します。
基底クラスである Zend_Form_Element は、 ほとんどの場合にうまく利用できるデフォルトを定義しています。 しかし、よく使われる特別な要素については それを継承したクラスを作成するほうがいいでしょう。 さらに、Zend Framework には数多くの標準 XHTML 要素が同梱されています。 標準の要素についての章 を参照ください。 プラグインローダーZend_Form_Element は、Zend_Loader_PluginLoader を使用しており、バリデータやフィルタ、デコレータの場所を指定できます。 それぞれに独自のプラグインローダーが関連付けられており、 アクセサを使用して個別に取得したり変更したりできます。 プラグインローダーのメソッドで使用できるローダーの型は 'validate'、'filter' と 'decorator' です。 この型名は大文字小文字を区別しません。 プラグインローダーを使用するためのメソッドを以下にまとめます。
独自のバリデータやフィルタ、デコレータを作成すると、 複数のフォームで機能を共有したり独自の機能をカプセル化したりすることが簡単になります。 Example #1 独自のラベル プラグインの使用例としてよくあるのは、 既存の標準クラス群のかわりとして使用することです。 たとえば、'Label' デコレータの実装を変更し、 最後に常にコロンを追加するようにしたくなったとしましょう。 そんな場合は、独自の 'Label' デコレータを クラスプレフィックスつきで作成し、 それをプレフィックスパスに追加します。 では、独自の Label デコレータを作ってみましょう。 ここではクラスプレフィックスを "My_Decorator" とします。 このクラスは、"My/Decorator/Label.php" というファイルで定義されることになります。
では、デコレータを探す際にこのプラグインパスを考慮するように 要素に指定してみましょう。
あるいは、フォームレベルでこれを設定してしまうべ、 すべてのデコレータがこのパスを考慮するようになります。
このパスにデコレータを追加すれば 'My/Decorator/' にあるデコレータがまず最初に見つけられることになります。 つまり、'Label' デコレータが必要となる場面ではそのかわりに 'My_Decorator_Label' が使われることになるわけです。 フィルタ
バリデーションの前に、入力の正規化を行えると便利です。
あるいはそれが必要となることもあるでしょう。
たとえば、HTML タグを除去した後の内容を検証したりといった場合です。
あるいは、入力の前後に含まれるスペースを取り除いてから検証を行わないと
StringLength バリデータが正しい判断をできないなどという場合もあります。
これらの操作は
Zend_Filter が行います。
Zend_Form_Element はフィルタチェインをサポートしているので、
複数のフィルタを順に適用できます。
フィルタリングは、バリデーションの際や要素の値を
フィルタをチェインに追加する方法は、次のふたつです。
では、例を見てみましょう。
短い形式の名前とは、通常はフィルタ名からプレフィックスを除いた部分のことです。 デフォルトでは、'Zend_Filter_' を除いた部分を表します。 また、最初の文字は大文字でも小文字でもかまいません。
フィルタリング前の値がほしい場合は
フィルタについての詳細な情報は Zend_Filter のドキュメント を参照ください。 フィルタ関係のメソッドを以下にまとめます。
バリデータセキュリティ界で有名なお言葉 "入力はフィルタリングせよ。 出力はエスケープせよ。" に賛同する人なら、フォームの入力を検証 ("入力のフィルタリング") したくなるでしょう。 Zend_Form では、各要素が個別にバリデータチェインを保持しています。 これは Zend_Validate_* のバリデータでできています。 バリデータをチェインに追加する方法は、次のふたつです。
では、例を見てみましょう。
短い形式の名前とは、通常はバリデータ名からプレフィックスを除いた部分のことです。 デフォルトでは、バリデータ名から 'Zend_Validate_' を除いた部分を表します。 また、最初の文字は大文字でも小文字でもかまいません。
どれかひとつのバリデーションに失敗したときに それ以降のバリデータを実行しないようにさせるには、2 番目のパラメータに TRUE を渡します。
バリデータの名前を指定して追加する場合で
そのバリデータクラスのコンストラクタが引数を受け付ける場合は、
この方式で引数を渡す場合は、コンストラクタで定義されているとおりの順で指定する必要があります。
上の例では、Zend_Validate_StringLenth
クラスのインスタンスを作成する際にパラメータ
複数のバリデータを一度に設定するには
もうすこし詳しくはっきりと書きたい場合は、キー 'validator'、'breakChainOnFailure' そして 'options' を持つ配列を使用することもできます。
この使用法は、設定ファイルを用いてバリデータを設定する場合に便利です。
それが必要か否かにかかわらず、すべての項目がキーを持つことに注意しましょう。 これは、設定ファイルを使用する場合の制限事項となります。 しかし、これにより、その引数がどういう意味なのかをきちんと明示できるようになります。 バリデータのオプションは、正しい順で指定しなければならないことに注意しましょう。
要素を検証するには、その値を
|
|