Php 验证表单但不验证子表单
我有一个Zend_表单,其子表单仅在某些情况下需要。父窗体和子窗体都有必填字段。子表单并不总是被填写,但当其任何元素被填写时,它们都应该被填写Php 验证表单但不验证子表单,php,zend-framework,zend-form,zend-validate,zend-form-sub-form,Php,Zend Framework,Zend Form,Zend Validate,Zend Form Sub Form,我有一个Zend_表单,其子表单仅在某些情况下需要。父窗体和子窗体都有必填字段。子表单并不总是被填写,但当其任何元素被填写时,它们都应该被填写 <?php class Cred extends Zend_Form { public function init() { $title = new Zend_Form_Element_Text('Title'); $title->setLabel('Title') ->setRequired(
<?php
class Cred extends Zend_Form
{
public function init()
{
$title = new Zend_Form_Element_Text('Title');
$title->setLabel('Title')
->setRequired(TRUE);
$this->addElement($title);
$award = new Zend_Form_Element_Text('Awarded');
$award->setLabel('Awarded On')
->setRequired(TRUE)
->addValidator('date');
$this->addElement($award);
$subform = new Zend_Form_SubForm();
$proof = new Zend_Form_Element_File('Documentation');
$proof->setLabel('Documentation')
->setRequired(TRUE)
->addValidator('Size', false, 409600) // limit to 400K
->addValidator('Extension', false, 'pdf');
$subform->addElement($proof);
$lang = new Zend_Form_Element_Select('Language');
$lang->setLabel('Language')->setRequired(TRUE);
$subform->addElement($lang);
$this->addSubForm($subform,'importForm');
$submit = new Zend_Form_Element_Submit('submitForm');
$submit->setLabel('Save');
$this->addElement($submit);
$this->setAction('/cred/save')
->setMethod('post')
->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
}
}
当我调用$form->isValid$\u POST时,它会验证父窗体和子窗体,并在子窗体的必需元素为空时返回错误,即使子窗体本身不是必需的
除了重载isValid函数外,是否有任何方法仅验证父窗体?如果查看源代码,您会发现没有明确的机制阻止在子窗体行2273 ff上执行验证器 无论如何,如果我理解你的要求,子表单不会总是被填写,但是当任何元素被填写时,它们都应该被填写。正确地说,我认为您的问题不一定与子表单本身有关,而是与条件验证有关。使用自定义验证器可以非常轻松地解决此问题:
请记住,$context中的元素只包含子表单元素。在需要时,我可以确定子表单本身是否有效,因为$form->getSubForm'importForm'->isValid。我想要一种不使用子窗体验证父窗体的方法。如果不可能,我也可以将父窗体的所有字段放入子窗体中。这样我就可以分别验证这两个子表单,父表单本质上就是子表单的空容器。笨重但实用。无论如何,谢谢你。