在我发现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');
}
...
}
答案 0 :(得分:1)
据我所知,填充表单时(包含无效数据)错误 自动显示。
情况并非如此,如果您使用无效值填充表单,则必须再次调用isValid
才能运行验证程序并使用相应的错误消息标记表单和元素。
您还可以保存FlashMessenger
中每个元素的错误消息,然后将错误消息重新附加到每个元素,但您也可以再次调用isValid
。如果您曾使用过具有File
元素的表单,则必须保存错误消息,因为您无法使用上传的文件重新填充该元素。
密码字段出现问题。当然,这些都是拒绝的 填充。
如果您在每个密码字段上设置renderPassword
标记(例如:$el->setRenderPassword()
),它们将与其余值一起填充,当您调用isValid
时,密码字段将被验证,并显示任何相应的错误消息。
希望有所帮助。