Zend Multiselect Element is posting only one selected values

陌路散爱 提交于 2019-12-14 02:33:45

问题


I am creating multiple select element like this and it is showed successfully on form:

$element = new Zend_Form_Element_Multiselect('clinics');
$element->setLabel("Clinics");
$element->setAttrib( 'style','width: 240px' );
$element->setMultiOptions( array( '1'=>'clinic1', '2'=>'clinic2' ) );

After rendering above element it shows the following html in html source:

<select name="clinics[]" id="clinics" multiple="multiple" style="width: 240px" size="5" class="required" tabindex="41">
    <option value="1" label="clinic1">clinic1</option>
    <option value="2" label="clinic2">clinic2</option>
</select>

But when I submit the form with two selected fields and print_r the result like this:

    $request = $this->getRequest();
    $form = new Patient_Form_Patient( $formOptions );

    if ( $request->isPost() ) {
        if ( $form->isValid( $request->getPost() ) ) {
            $values = $form->getValues();
            print_r($values);die();
        }
    } 

It stores only first selected option in array but not all selected elements:

Array
( 
    [clinics] => Array
        (
            [0] => 1
        )

    [save] => Submit
)

Can someone help that how can I submit multiple values ?


回答1:


I have reconstructed your problem and I got no such error. You can see what I did below:

Application_Form_Patient

class Application_Form_Patient extends Zend_Form
{

  public function init()
  {
    $this->setName('patient');

    $element = new Zend_Form_Element_Multiselect('clinics');
    $element->setLabel("Clinics");
    $element->setAttrib( 'style','width: 240px' );
    $element->setMultiOptions( array('1'=>'clinic1', '2'=>'clinic2' ) );

    $submit = $this->createElement('submit', 'submit');
    $submit->setLabel('Submit');

    $this->addElements(array(
      $element, $submit
    ));
  }

}

IndexController.php

class IndexController extends Zend_Controller
{

  function indexAction()
  {
    require_once 'Application/Form/Patient.php';
    $form = new Application_Form_Patient();

    $request = $this->getRequest();

    if ( $request->isPost() ) {
      if ( $form->isValid( $request->getPost() ) ) {
        $values = $form->getValues();
        Zend_Debug::dump($values);
        die();
      }
    } 

    $this->view->form = $form;
  }

}

index.phtml

<?php
echo $this->form;

here's the debug output (one selected item and two selected items)

# select one item
array(1) {
  ["clinics"] => array(1) {
    [0] => string(1) "1"
  }
}

# select two items
array(1) {
  ["clinics"] => array(2) {
    [0] => string(1) "1"
    [1] => string(1) "2"
  }
}

Hope it can help you ;)




回答2:


I think your problem is that you use :

$element->setMultiOptions( array( '1'=>'clinic1', '2'=>'clinic2' ) );

instead of:

// addMultiOptions
$element->addMultiOptions( array( '1'=>'clinic1', '2'=>'clinic2' ) );



回答3:


How are you rendering the element in your view?

From memory, if the element is not part of a Zend_Form, you will need to set its name attribute manually to include square brackets, eg $element->setName('clinics[]');.

This is usually handled by a parent form or the PrepareElements decorator (sorry, can't remember exactly and can't test this to find out)



来源:https://stackoverflow.com/questions/4052512/zend-multiselect-element-is-posting-only-one-selected-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!