Zend Frameworkのフォーム

Zend Frameworkで私のお気に入りのコンポーネントは何かとよく聞かれますが、いつも「フォーム」と答えます。

パラダイムでは、model-view-controllerフォームは常に難しい役割を果たします。 もちろん、フォームは単なるHTMLであり、

しかし、私にとってはもっと抽象的なものです。

本質的に、フォームはHTMLであり、ユーザーはこれを使用してデータを入力および受信しますが、これに加えて、フォームも

データの正規化、確認、フィルタリング、エラーメッセージの表示(ある場合)。

これには、かなりの量のコードが必要になる場合があります。





これらすべてを自動化できる場合、設定のみが可能です。

各フォームは要素で構成され、各要素には機能を再定義するいくつかの属性があります

フォーム。

これらの側面のいくつかを見てみましょう。





フォーム作成



フォームはZend_Formクラスのインスタンスです。 インスタンスはさまざまな方法で作成できます。

Zend_Formクラスを継承して、クラスを作成することを好みます。 そして、すでにクラスで必要な変更を加えています。

各フォームはいくつかの重要なフィールド(アクション、メソッド)で構成され、少なくとも1つの要素が含まれています。

要素を作成する方法を見てみましょう。

各要素には、フィールドタイプ、ラベル、名前、説明などの典型的な属性がいくつかあります。

ZFでそのような要素を説明しましょう。

フォームを作成するにはいくつかの異なる方法があることに注意してください。 これは私のお気に入りの方法です。





$username = new Zend_Form_Element_Text( 'username' , array(<br> 'label' => 'Username' ,<br> 'description' => 'This is a description' )); <br><br> * This source code was highlighted with Source Code Highlighter .











ご覧のとおり、この例ではこれらすべての属性を設定しています。



ご注意 翻訳者:

フィールドタイプ-Zend_Form_Element_Text

ラベル-「ユーザー名」

名前は「ユーザー名」です

説明(説明)-「これは説明です」





上記に加えて、要素にはいくつかの重要な属性があります。 さらにいくつか追加しましょう。



$ this ->addElements(array(<br> new Zend_Form_Element_Text( 'username' , array(<br> 'label' => 'Username' ,<br> 'required' => true )),<br> )); <br><br> * This source code was highlighted with Source Code Highlighter .









フィルターとバリデーター



フィルターとバリデーターのチェーンを構築することは、フォームコンポーネントの非常に便利な機能の1つです。

フィルタは、入力データの変換を自動的に実行するものです。

バリデーターは、フォーム処理中にデータを自動的に検証するメカニズムです。

これらのメカニズムにより、コントローラーのコードとモデルが大幅に簡素化されます。 論理はより組織化された

構造。





例を考えてみましょう。 登録フォームには、ユーザー名の入力要素があります。 検証を実装する必要があります

名前の一意性。名前は許可された文字のみで構成され、その長さは有効な範囲に含まれている必要があります。





ユーザーが自分自身についてなど、ユーザーが任意のテキストを入力できるフォームに要素がある場合は、必ず

「クリーン」なデータを入力するためにフィルターを適用する必要があります。

StripTagsなどのフィルターを追加してすべてのHTMLタグを削除し、StringTrimを追加して不要なスペースをすべて削除すると便利です。

必要に応じて、BBコードを処理するフィルターを追加できます。

これを行うには、独自のフィルターを作成するか、他のフォームで使用できるコールバックフィルターを使用できます。





データをできる限り慎重にチェックするという考え方です。データが100%一貫していることを確認する必要があります。

アプリケーション。 タイプVARCHAR(255)のフィールドがある場合は、入力フィールドを255文字に制限します。行をトリミングする機能を使用する必要はありません。

細心の注意を払ってください。





フィルタはデータの整合性を維持するのに役立ち、フォームに入力されたデータをクリーンアップするプロセスでも使用できます。

ユーザーが何かを入力できるようにする場合は、必ずすべてのHTMLタグを削除してください。 あなたはその考えを理解していると思います...





登録フォームのより完全な例を示します。



$ this ->addElements(array(<br> new Zend_Form_Element_Text( 'username' , array(<br> 'label' => 'Username' ,<br> 'required' => true ,<br> 'validators' => array(<br> array( 'StringLength' , false , array(4, 16)),<br> array( 'Alnum' ),<br> array( 'Db_NoRecordExists' , false , array( 'users' , 'username' ))<br> )<br> )),<br> new Zend_Form_Element_Text( 'email' , array(<br> 'label' => 'Email Address' ,<br> 'required' => true ,<br> 'validators' => array(<br> array( 'EmailAddress' ),<br> array( 'Db_NoRecordExists' , false , array( 'users' , 'email' ))<br> )<br> )),<br> new Zend_Form_Element_Password( 'password' , array(<br> 'label' => 'Password' ,<br> 'required' => true <br> ))<br>)); <br><br> * This source code was highlighted with Source Code Highlighter .









スリムコントローラー、シックモデル



上記のフォームでは、非常にシンプルなコントローラーを開発できます。

コントローラーはアプリケーションロジックを制御する必要がありますが、データを操作しないでください。

登録フォームのアクションの例を次に示します。



if ($ this ->_request->isPost()) <br>{<br> if ($form->isValid($ this ->_request->getPost())) <br> {<br> $user->register($form->getValues());<br> $ this ->redirector->goToUrl( '/welcome' );<br> }<br>}<br>$ this ->view->form = $form; <br><br> * This source code was highlighted with Source Code Highlighter .









ユーザーがデータの入力を完了すると、バリデーターは入力された情報を検証します。

テストが成功すると、データ配列がモデルに渡されます。 データがモデルに転送されるまでに、すべて

フィルターとバリデーターは作業を完了する必要があります。 これで、データをフォーマットする方法と、そのセキュリティを強化する方法をすでに知っています。

コントローラーでは、アプリケーションのロジックに従って、ユーザーを別のページにリダイレクトしたり、他のアクションを実行したりできます。





フォームは、プレゼンテーションを通じてユーザーに表示されます。 一般に、ビューはフォームをロードしてユーザーに表示するだけです。

ユーザーが入力したデータにエラーが含まれている場合、ビューはフォームを表示してエラーメッセージを表示するだけでなく、

入力したデータが表示されます。





スクリプトとデコレータを表示する



以下は、フォームを表示できるビューコード全体です。 フォームの追加構成が必要な場合は、

CSSツールまたはデコレーターを使用して実行します。



<?= $ this ->form ?> <br><br> * This source code was highlighted with Source Code Highlighter .







デフォルトでは、Zend_Formはかなり適切なHTMLコードを生成します。 私は追加を課すことに何の困難もありません

CSSスタイル。 CSSの使用は、アプリケーションのさまざまな機能部分を分離するという概念によく適合します。

ただし、多くの場合、表示スタイルだけでなく、要素のレイアウトも変更する必要があります。 Zendが使用する

デコレータ。 デコレータは理解するのがやや難しいので、次の投稿に残します。





モデルとの相互作用



コントローラーのコードに従って、関数$ form-> getValues()の結果がモデルに渡されます。

この関数の結果は、事前にチェックおよびフィルタリングされたデータ配列です。

以下に例を示します。



// ... <br> public function register(array $user) {<br><br>}<br>// ... <br><br> * This source code was highlighted with Source Code Highlighter .







これは素晴らしいと思います。 非常にシンプルなインターフェースを使用しており、各値を手動で指定する必要はありません。

伝えたい。 もちろん、これはビジネスですが、モデルに5〜10個の値を送信する人々を理解していません。

このようなコントローラーは確かに大きくなります。

もちろん、コードはデータの配列を処理するため、フォームに依存しません。 これによりモデルの呼び出しが非常に簡単になります。

モデルは、複雑なコードを開始する場所です。

このアプローチでは、データベースアダプタオブジェクトまたは他のいくつかのライブラリを使用できます。



おわりに



コンポーネント形式は、Zendの最大のコンポーネントの1つであり、おそらく最大のコンポーネントです。 質問することを恐れないでください。

さまざまなフォーラムで、または以下のフォームで質問をして、良いリソースを紹介します。 私が言ったように、私にとってはそれが最も

Zendの便利なコンポーネント。 時間をかけて勉強しないことを強くお勧めします。





キャッシュフォームの資料に興味があるかもしれません。





ペトレレヴィッチ・セルゲイ

petrelevich@yandex.ru

www.SmartyIT.ru



All Articles