2013-04-22 50 views
1

在Zend框架2的应用程序,我在我的控制器的操作方法如下形式:ZF2:“需要” =>假忽略DateSelect元素

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()方法需要一个格式,其中空白日期不符合。

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

回答

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, 
        ), 
       ), 
      ), 
     ))); 

指所需的场场是否需要 - 你可以将其设置为假