1

在 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()方法需要空日期不符合的格式。

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

4

1 回答 1

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

于 2013-12-19T07:30:02.097 回答