2012-10-13 9 views
5

私のフォームの1つに選択ボックスを追加しようとしていますが(入力タイプ= "テキスト" getはそれにタグがない空の選択ボックスです。だから、これは私が使用したコードです:Zend Framework 2:フォームに選択ボックスを追加しようとすると値が表示されない

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 - > __構築物():

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

私はすでにそれがvalue_options」の単なる別名であることを代わりに「value_options」と昨日私が学んだの「オプション」を使用してみました"また私は私のビューでformElement()の代わりにformSelect()を試したが、それは何も変わらない。私もテスト目的のために文字列からウムラウトを削除しました...

私は現在間違っていますか?

答えて

5

私は現行のマスター(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か現在のマスターのどちらに対してもテストできますか?

+1

2.0.2で上記の私のコードは魅力的に働いています。見て、私にそれを知らせてくれてありがとう。 – pebbo

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

「オプション」と「値が」ウンター入れ子にする必要があり、「属性」...うんまあ、なぜ?私は深いinter Zend \ Form \ Element \ Selectを見て、 "getOptionAttributeValues()"というメソッドが存在することを知りました。これはヒントを与えました。

+0

さらに私が知っているのは、 "オプション"であり、 "value_options"ではないということです。 – pebbo

+2

"value_options"を使用しているコードが正しいです。私は、質問に用意されている例を取って、現在のマスター(rev 9747bd01d)に対して正しく動作します。オプションは属性に**指定しないでください**。 – weierophinney

+0

OK、アプリを2.0.2にアップデートしました。すべてのことが私の質問のコードでうまくいきます。 "value_options"の事実を明確にしていただきありがとうございます。 – pebbo

関連する問題