会验证所有窗体。
我有一个表格,上面有几个子表格。我有一个isValid
的表单方法,用于检查是否只有一个特定的子表单有效。例如,我必须检查subform2
是否正确验证。如果子窗体验证,则即使其他子窗体具有错误的值,也应成功验证整个窗体。只是不应该验证它们。我尝试了这样的事情:
if($subform->isValidPartial($_POST))
return true;
}else{
return false;
}
但没有成功。此代码始终返回 true。当正常验证整个表单而不覆盖isValid
时,将正确验证子窗体,但
如果至少有一个子窗体有效,isSubFormValid
将返回 true。您可以指定子窗体名称或传递null
。
class My_Form extends Zend_Form
{
public function isSubFormValid($name = null, array $data = null)
{
if (is_null($name)) {
$subForms = $this->getSubForms();
} else {
$subForms = array($this->getSubForm($name));
}
foreach ($subForms as $subForm) {
if ($subForm->isValid($data)) {
return true;
}
}
return false;
}
}
使用示例:
class Example extends My_Form
{
public function init()
{
$subForm1 = new Zend_Form_SubForm();
$subForm1->addElement($this
->createElement('text', 'name')
->setRequired(true));
$subForm2 = new Zend_Form_SubForm();
$subForm2->addElement($this
->createElement('text', 'name')
->setRequired(true));
$this->addSubForm($subForm1, 'form1');
$this->addSubForm($subForm2, 'form2');
$this->addElement($this->createElement('submit', 'send'));
}
}
/* ... */
public function indexAction()
{
$form = new Example();
if ($this->_request->isPost()) {
if ($form->isSubFormValid(null, $this->_request->getPost())) {
die('is valid');
}
}
$this->view->form = $form;
}
/* ... */