簡體   English   中英

ZF2:“必需” =>對於DateSelect元素,忽略false

[英]ZF2: 'required' => false ignored for DateSelect element

在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元素的源代碼, DateSelect看到一個getInputSpecification()方法,該方法默認情況下將必需設置為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM