Php 验证表单但不验证子表单

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(

我有一个Zend_表单,其子表单仅在某些情况下需要。父窗体和子窗体都有必填字段。子表单并不总是被填写,但当其任何元素被填写时,它们都应该被填写

<?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。我想要一种不使用子窗体验证父窗体的方法。如果不可能,我也可以将父窗体的所有字段放入子窗体中。这样我就可以分别验证这两个子表单,父表单本质上就是子表单的空容器。笨重但实用。无论如何,谢谢你。