2017-10-19 79 views
0

我不确定发生了什么。我使用Zend Form 2和多选字段。当我提交代码时,这些值在post中存在。当我通过zend表单2运行这些值时,我得不到验证错误,但多选字段突然变空。验证后,Zend Form 2多选字段为空

class Form extends \Zend\Form\Form 
{ 
    // input filter to set up filters and validators 
    protected $myInputFilter; 

    public function __construct() 
    { 
     // create the zend form 
     parent::__construct(); 

     // make it a bootstrap form 
     $this->setAttribute('class', 'form-horizontal'); 
     $this->setAttribute('role', 'form'); 

     // set the default objects we'll use to build the form validator 
     $this->myInputFilter = new \Zend\InputFilter\InputFilter(); 
    } 
} 

class AddPublicationForm extends Form 
{ 
    public function __construct() 
    { 
     // create the zend form 
     parent::__construct(); 

     $this->setAttribute('class', 'form-horizontal'); 
     $this->setAttribute('id', 'add-publication-form'); 

     $this->add([ 
      'name' => 'author[]', 
      'attributes' => [ 
       'class' => 'form-control', 
       'data-placeholder' => 'Author', 
       'multiple' => 'multiple', 
       'placeholder' => 'Author', 
      ], 
      'required' => false, 
      'type'  => \Zend\Form\Element\Select::class, 
      'options' => [ 
       'value_options' => [ 
        'check1' => 'check1', 
        'check2' => 'check2', 
       ], 
      ], 
     ]); 

     $this->myInputFilter->add([ 
      'filters' => [], 
      'name' => 'author[]', 
      'required' => false, 
      'validators' => [], 
     ]); 

     // attach validators and filters 
     $this->setInputFilter($this->myInputFilter); 

     // prepare the form 
     $this->prepare(); 
    } 
} 

这些是我正在使用的zend窗体对象。我使用Slim Framework 2作为我的后端。这里是控制器对象:

public function addAction() 
{ 
    $request = $this->app->request; 
    $form = new Form\AddPublicationForm(); 

    if ($request->isPost()) { 
     $params = $request->params(); 
     // DUMP 1: exit('<pre>'.print_r($params, true).'</pre>'); 
     $form->setData($params); 

     if ($form->isValid()) { 
      $data = $form->getData(); 
      // DUMP 2: exit('<pre>'.print_r($data, true).'</pre>'); 
     } 
    } 
} 

DUMP 1:

Array 
(
    [author] => Array 
     (
      [0] => check1 
      [1] => check2 
     ) 
} 

DUMP 2:

Array 
(
    [author[]] => 
) 

我意识到,我可以很容易地只是绕过验证在这里,因为我不使用该领域的任何验证器。尽管如此,我更关心的是潜在的原因。

为什么验证的作者数据是空的?

回答

0

当您在属性中指定multiple时,Zend\FormZend\InputFilter在名称后添加[]。否则,您不应该自己动手,在html代码中,该元素出现在名称author[][]setData方法不匹配。 要查看它,请用true替换required,然后查看表单的html代码。

$this->add([ 
     'name' => 'author', 
     'attributes' => [ 
      'class' => 'form-control', 
      'data-placeholder' => 'Author', 
      'multiple' => 'multiple', 
      'placeholder' => 'Author', 
     ], 
     'required' => false, 
     'type'  => \Zend\Form\Element\Select::class, 
     'options' => [ 
      'value_options' => [ 
       'check1' => 'check1', 
       'check2' => 'check2', 
      ], 
     ], 
    ]); 

    $this->myInputFilter->add([ 
     'filters' => [], 
     'name' => 'author', 
     'required' => false, 
     'validators' => [], 
    ]); 
+0

This Works!谢谢! – lokisapocalypse