2

私はZFの初心者で、ユーザーがフォームを送信した後にログインフォームを装飾する方法を見つけるためにGoogleで少し検索しました(例:ログインフォーム)。有効でない場合の送信と処理の後、間違って入力されたフィールドの上に Twitter ブートストラップ アラートを表示したいと考えています。

  1. フォームを制御するモデルを作成する!isValid()必要がありますか?フォームがそこからフォームを生成する必要がある場合は、追加のデコレータを設定しますか?
  2. ビューをレンダリングして装飾した後、セッションですべてを設定し、それらの変数をクリアする必要がありますか?
  3. それとも、他の神秘的な方法を使用する必要がありますか?
4

2 に答える 2

1

これらは、エラー メッセージを表示するために使用する 2 つの方法です。

特定のメッセージを表示するために、すべてのフィールドで標準のエラーデコレータを変更せずに残しました(つまり、無効な電子メール)

また、 を使用して、次のflashMessengerような一般的なメッセージを表示します

Errors occured while validating the form:
* Email
* ...

flashMessenger、同等のビュー ヘルパーを持つアクション ヘルパーです。flashMessenger は、表示されると自動的にセッションからクリアされるワンホップ セッション メッセージです。

flashMessengerの詳細。

于 2013-01-24T21:12:05.593 に答える
1

私は、エラーをその要素と一致させておく傾向があります。しかし、あなたと同じように、修正すべき点があることをユーザーに示すフォーム レベルのアラートを上部に表示することも好みます。

そのために、私は通常、コントローラーにフラグを追加します。

if ($form->isValid($postData)){
   // write to db and redirect
} else {
    $this->view->hasFormError = true;
}
$this->view->form = $form;

次に、ビュースクリプトで:

<?php if ($this->hasFormError): ?>
<!-- my alert box, using Bootstrap or whatever -->
<?php endif; ?>
<?= $this->form ?>

FormErrorフォーム自体にデコレータを追加する方が、ほぼ間違いなくスマートです。フォーム要素のいずれかにエラーがあるかどうかを確認し、アラートをレンダリングします。次に、コントローラーとビュー スクリプトがよりスリムになります。

コントローラ:

if ($form->isValid($postData)){
   // write to db and redirect
}
$this->view->form = $form;

ビュースクリプト:

<?= $this->form ?>

しかし、別のデコレータを定義し、デコレータ プレフィックスを設定し、それをフォームに追加することに直面したとき、私は通常、コストを抑えて in-controller フラグを使用することを告白します。

[原則として、デコレーターを適用するという全体的なアイデアは、フォーム定義自体の一部ではなく、ビューレイヤーの一部であるべきだと思います。その哲学の下では、ビュー スクリプトに到達するまでフォームを装飾しないままにしておきます。その時点で、すべてのデコレータを追加するビュー ヘルパーを適用できます。これは、多少変更された意味で、ZF2 が行うことです。しかし、私はその道を深く追求する時間がありませんでした.]

于 2013-01-25T07:25:24.473 に答える