ZF2:'required'=>对DateSelect元素忽略false

时间:2013-04-22 17:16:00

标签: 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',
            '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()方法默认设置为false,并且还有一个getValidator()方法需要一个格式用于空日期不遵守。

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

1 个答案:

答案 0 :(得分:0)

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

$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