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

Posted

技术标签:

【中文标题】ZF2: \'required\' => false 忽略 DateSelect 元素【英文标题】:ZF2: 'required' => false ignored for DateSelect elementZF2: 'required' => false 忽略 DateSelect 元素 【发布时间】:2013-04-15 16:40:19 【问题描述】:

在 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】:

我一般使用工厂模式,可以设置字段是否为必填即

$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

【讨论】:

以上是关于ZF2: 'required' => false 忽略 DateSelect 元素的主要内容,如果未能解决你的问题,请参考以下文章

ZF2维护页面

zf2 插入使用 $db->insert($table, $data);风格

Zf2 列出实体学说 2 中的元素

在ZF2中添加了动态模板图

ZF2 Doctrine Form 注解类型选择

ZF2 - 如何正确设置标题?