Barrett Conrad のアドバイスは、私が提案したものです。また、フォーム オブジェクトを使用してフォームをレンダリングする必要はないことにも注意してください。
できることの 1 つは、ビュー スクリプトで、フォーム クラスと同じ名前の要素を持つフォームを作成することです。
あなたの HTML フォーム:
<form action="/login/" method="post">
<fieldset>
<label for="username">Username:</label>
<input type="text" size="10" name="username" />
<label for="password">Password:</label>
<input type="password" size="10" name="password" />
<input type="submit" />
</fieldset>
</form>
あなたのクラス:
class LoginForm extends Zend_Form
{
public function init()
{
$username = $this->createElement('text','username');
$username->setRequired(true);
$this->addElement($username);
$password = $this->createElement('password','password');
$password->setRequired(true);
$this->addElement($password);
}
}
フォーム クラスは HTML フォームを反映し、クラスの各要素には独自のバリデータと要件があります。アクションに戻って、フォーム クラスのインスタンスを作成し、そのフォームに対して post/get 変数を検証できます。
$form = new LoginForm();
if ($this->_request->isPost()) {
if ($form->isValid($this->_request->getParams())) {
// do whatever you need to do
} else {
$this->view->errors = $form->getMessages();
}
}
この方法を使用して、エラー メッセージをフォームの上部に 1 つのグループで表示できます。
これは基本的な例ですが、デコレータの使い方を学ぶ時間を費やすことなく、フォームの表示を完全に制御できます。私の意見では、Zend_Form の強みの多くは検証とフィルタリングのプロパティにあります。これはあなたにその強さを与えます。このようなソリューションの主な欠点は、ビュー スクリプトの HTML フォームがフォーム クラスと同期しなくなる可能性があることです。