巴雷特·康拉德的建议是我建议的。此外,请记住,您不需要使用表单对象来呈现表单。
您可以做的一件事是在视图脚本中创建一个表单,其中包含与表单类同名的元素。
您的 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 vars:
$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();
}
}
您可以使用此方法在一个组中显示窗体顶部的错误消息。
这是一个基本示例,但它允许您完全控制窗体的呈现方式,而无需花时间学习使用装饰器。在我看来,Zend_Form的大部分优势在于其验证和过滤属性。这给了你这种力量。像这样的解决方案的主要缺点是,您的视图脚本 HTML 表单可能会与表单类不同步。