Zend framework2 ZF2:'required'=>忽略DateSelect元素的false

Zend framework2 ZF2:'required'=>忽略DateSelect元素的false,zend-framework2,validation,required,zend-form2,Zend Framework2,Validation,Required,Zend Form2,在Zend Framework 2应用程序中,我的控制器操作方法具有以下形式: public function testAction() { $form = new \Zend\Form\Form('test'); $date = new \Zend\Form\Element\DateSelect('date'); $date->setOptions(array( 'label' => 'Date', '

在Zend Framework 2应用程序中,我的控制器操作方法具有以下形式:

public function testAction()
{
    $form = new \Zend\Form\Form('test');

    $date = new \Zend\Form\Element\DateSelect('date');
    $date->setOptions(array(
            'label'    => 'Date',
            'min_year' => date('Y') - 10,
            'max_year' => date('Y') + 10,
        )
    );

    $date->getDayElement()->setEmptyOption('day');
    $date->getMonthElement()->setEmptyOption('month');
    $date->getYearElement()->setEmptyOption('year');

    $form->add($date);

    $form->add(array(
        'name'    => 'submit',
        'attributes' => array(
            'type'  => 'submit',
            'value' => 'submit',
            'id' => 'submitbutton',
        ),
    ));

    if ($this->request->isPost()) {
        $data = $this->request->getPost();            
        $form->setData($data);

        if ($form->isValid()) {
            $data = $form->getData();
            // more code
        }
    }

    return array('form' => $form);
}
现在,如果我提交表单,我会收到验证消息:

'输入似乎不是有效日期'

这是正确的,但我只想知道该字段是否为必填字段。如果我查看DateSelect元素的源代码,我会看到一个getInputSpecification方法,该方法在默认情况下将required设置为false,还有一个getValidator方法需要空日期不符合的格式


如果输入不是必需的,我怎么能绕过验证?显然,在我的真实形式中,我有更多的元素?

我通常使用工厂模式,您可以设置字段是否是必需的

$inputFilter->add($factory->createInput(array(
            'name'     => 'availableDate',
            'required' => true,
            'filters'  => array(
                array('name' => 'StripTags'),
                array('name' => 'StringTrim'),
            ),
            'validators' => array(
                array(
                    'name'    => 'StringLength',
                    'options' => array(
                        'encoding' => 'UTF-8',
                        'max'      => 20,
                    ),
                ),
            ),
        )));
请参阅必填字段-您可以将其设置为false