我正在创建多个这样的选择元素,并在表单上成功显示:
$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
)
有人可以帮我知道如何提交多个值?
答案 0 :(得分: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
));
}
}
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;
这是调试输出(一个选定项目和两个选定项目)
# 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"
}
}
希望它可以帮到你;)
答案 1 :(得分:0)
我认为您的问题是您使用:
$element->setMultiOptions( array( '1'=>'clinic1', '2'=>'clinic2' ) );
而不是:
// addMultiOptions
$element->addMultiOptions( array( '1'=>'clinic1', '2'=>'clinic2' ) );
答案 2 :(得分:0)
您如何在视图中呈现元素?
从内存中,如果元素不属于Zend_Form
,则需要手动设置其name
属性以包含方括号,例如$element->setName('clinics[]');
。
这通常由父表单或PrepareElements
装饰器处理(抱歉,记不清楚,无法测试此内容)