1

我正在创建这样的多个选择元素,它在表单上成功显示:

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

渲染上面的元素后,它在 html 源代码中显示以下 html:

<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>

但是当我提交带有两个选定字段和 print_r 的表单时,结果如下:

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

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

它仅存储数组中的第一个选定选项,但不存储所有选定元素:

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

    [save] => Submit
)

有人可以帮助我如何提交多个值吗?

4

3 回答 3

6

我已经重建了你的问题,我没有遇到这样的错误。你可以在下面看到我做了什么:

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

}

索引控制器.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;
  }

}

索引.phtml

<?php
echo $this->form;

这是调试输出(一个选定的项目和两个选定的项目)

# 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"
  }
}

希望它可以帮助你;)

于 2010-11-04T13:54:53.700 回答
0

我认为你的问题是你使用:

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

代替:

// addMultiOptions
$element->addMultiOptions( array( '1'=>'clinic1', '2'=>'clinic2' ) );
于 2010-11-03T15:04:42.517 回答
0

您如何在视图中渲染元素?

根据记忆,如果元素不是 a 的一部分Zend_Form,您将需要name手动设置其属性以包含方括号,例如$element->setName('clinics[]');.

这通常由父表单或PrepareElements装饰器处理(抱歉,不记得确切并且无法测试以找出答案)

于 2010-11-03T22:23:55.687 回答