私は、エラーをその要素と一致させておく傾向があります。しかし、あなたと同じように、修正すべき点があることをユーザーに示すフォーム レベルのアラートを上部に表示することも好みます。
そのために、私は通常、コントローラーにフラグを追加します。
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 が行うことです。しかし、私はその道を深く追求する時間がありませんでした.]