在我找到的Zend_Form的所有示例中,显示表单的视图与处理表单的操作相对应。但是,我想要一个显示多个独立表单和处理每个表单的单独操作的视图(未使用其视图)。
重定向到单个操作不是问题,表单在那里处理,但当出现验证错误时,我希望它们显示在每个项目旁边的公共视图中,Zend_Form样式。据我所知,当表单被填充(包含无效数据)时,错误会自动显示。然后,当表单无效时,我使用FlashMessenger来存储无效内容,然后重定向到主要的常见操作并用他填充表单。
密码字段出现问题。当然,这些拒绝填充,因此不会显示任何错误消息。我可以显示它而不必手动找出发生了哪个错误吗?
感谢您对我的英语的关注和耐心:p
PS:为了更好地理解,我附上了一个示例代码,解释我所做的…
class TestController extends Zend_Controller_Action
{
...
public function commonAction() {
/*Initialize form objects*/
$form1 = new Application_Form_Form1();
...
$formN = new Application_Form_FormN();
/*Fill forms if needed*/
$flashMess = $this->_helper->FlashMessenger;
if ($flashMess->hasMessages()) {
$messages = $flashMess->getMessages();
switch ($messages[1]) {
case 'form1':
$form1->populate($messages[0]);
break;
...
case 'formN':
$fotmN->populate($messages[0]);
break;
default:
...
break;
}
}
/*Assign to the view*/
$this->view->form1 = $form1;
...
$this->view->formN = $formN;
}
public function form1Action() {
if ($this->getRequest()->isPost()) {
$form1 = new Application_Form_Form1();
$data = $this->getRequest()->getPost();
if ($form1->isValid($data)) {
...
} else {
$this->_helper->FlashMessenger($data);
$this->_helper->FlashMessenger('form1');
}
}
$this->redirect('/test/common');
}
...
}
据我所知,当表单被填充(包含无效数据)时,会出现错误自动显示。
事实并非如此,如果用无效值填充表单,则必须再次调用isValid
才能运行验证器并用适当的错误消息标记表单和元素。
您也可以将每个元素的错误消息保存在FlashMessenger
中,然后将错误消息重新附加回每个元素,但也可以再次调用isValid
。如果您使用过带有File
元素的表单,则必须保存错误消息,因为您将无法使用上载的文件重新填充该元素。
密码字段出现问题。当然,他们拒绝要填充。
如果您在每个密码字段上设置renderPassword
标志(例如:$el->setRenderPassword()
),它们将与其他值一起填充,当您调用isValid
时,密码字段将被验证,并显示任何适当的错误消息。
希望能有所帮助。