5

我正在尝试将一个选择框添加到我的一个表单中(仅使用 input type="text" 元素就可以很好地工作),但我得到的只是一个没有标签的空选择框。所以这是我使用的代码:

Bla.php :: Bla->getInputFilter()

$inputFilter->add($factory->createInput(array(
   'type' => 'Zend\InputFilter\Select',
   'name' => 'payment_type',
   'required' => true,
   'filters'  => array(
       array('name' => 'Int'),
   ),
)));

BlaForm.php :: BlaForm->__construct():

$this->add(array(
    'type' => 'Zend\Form\Element\Select',
    'name' => 'payment_type',
    'options' => array(
        'label' => 'Payment',
        'value_options' => array(
            0 => 'Nur Überweisung',
            1 => 'Nur Paypal',
            2 => 'Nur Barzahlung im Voraus',
        ),
    ),
    'attributes' => array(
        'value' => 0 //set selected to "Nur Überweisung"
    )
));

bla.php (查看)

<div class="control-group">
    <?php
        echo $this->formLabel($form->get('payment_type')->setLabelAttributes(array(
                 'class' => 'control-label'     
             )));
    ?>
    <div class="controls">
        <?=$this->formElement($form->get('payment_type'));?>
        <span class="help-inline"><?=$this->formElementErrors($form->get('payment_type'));?></span>
    </div>
</div>

我已经尝试使用“options”而不是“value_options”,昨天我了解到它只是“value_options”的别名。在我看来,我也尝试了 formSelect() 而不是 formElement() ,但这也没有改变任何东西。我什至从字符串中删除了变音符号以进行测试......

有没有人遇到过同样的问题或有任何想法,我目前做错了什么?

4

2 回答 2

5

我刚刚在本地针对当前的 master (rev 9747bd01d)尝试了您的示例,并且它们可以正常工作-在表单上使用 formCollection() ,或者在单个元素上使用 formElement() 或 formSelect() 。在每种情况下,我都会得到以下标记:

<select name="payment_type"><option value="0" selected="selected">Nur Überweisung</option>
<option value="1">Nur Paypal</option>
<option value="2">Nur Barzahlung im Voraus</option></select>

你用的是什么版本的ZF2?请问您可以针对 2.0.2 或当前的 master 进行测试吗?

于 2012-10-15T14:03:01.013 回答
0

我自己找到了解决方案。在 BlaForm.php 中,选择框元素的格式必须如下:

$this->add(array(
    'type' => 'Zend\Form\Element\Select',
    'name' => 'payment_type',
    'options' => array(
        'label' => 'Bezahlung',
    ),
    'attributes' => array(
        'options' => array(
            0 => 'Nurerweisung',
            1 => 'NurPaypal',
            2 => 'NurBarzahlung im Voraus',
            3 => 'NurBarzahlung am Bus',
        ),
        'value' => 2 //set selected to "public"
    )
));

“选项”和“值”需要嵌套在“属性”下......好吧,为什么不呢?我通过更深入地查看 Zend\Form\Element\Select 发现存在方法“getOptionAttributeValues()”的位置,这给了我提示。

于 2012-10-13T14:02:50.147 回答