2016-09-07 3 views
3

私はSymfony 2とフォームビルダーに少し問題があります。 Doctrine findAllの結果に基づいてChoiceTypeフィールドを作成したいとします。symfony 2、エンティティ上のChoiceTypeを持つcreateFormBuilder、choice_labelはint

選択肢は配列ですが、choice_label関数では最初の変数はintです!

私が説明のために少しのコード入れ:もちろん

$categories = $categoryRepository->findAll(); 

    foreach ($categories as $value) { 
     echo "category name : ".$value->getName()."<br/>"; 
    } 
    /* Result : 
     category name : First 
     category name : Second 
    */   

    $form = $this->createFormBuilder($dance) 
      ->add('name', TextType::class, array('label' => 'Nom de la dance')) 
      ->add('description', TextareaType::class, array('label' => 'Description')) 
      ->add('creationDate', DateTimeType::class, array('label' => 'Date de création')) 
      ->add('category', ChoiceType::class, [ 
       'choices' => $categories, 
       'choice_label' => function($category, $key, $index) { 
        var_dump($category); 
        // Result : int(0) 
        return $category->getName(); 
        // Exception ! 
       }, 
       'choice_attr' => function($category, $key, $index) { 
        return ['class' => $category->getId()]; 
       }, 
      ]) 
      ->add('save', SubmitType::class, array('label' => 'Sauvegarder')) 
      ->getForm(); 

を、私は致命的なエラーを持っている:メンバ関数のgetName(の呼び出し)整数に...

誰かが私を助けることができますこの問題 ?

ありがとうございました!

+0

を私は '$のcategories'が配列であることを確認してください'choices'オプションに渡されたときのオブジェクト'' choice_label''オプションにコメントすると、 '' choice_attr''オプションにエラーが渡されます。これはうまくいきますか? – yceruto

答えて

2

symfony 2.7より古いバージョンを使用している場合は、単にオブジェクトの配列をchoicesオプションに渡すことはできません。これはSymfony> = 2.7でのみサポートされています。あなたはsymfonyの2.7または2.8でこれを行うにしたい場合は、choices_as_values optionを有効にする必要があります:the keys of the array become the value and the value of they array becomes the label

'choices_as_values' => true 

デフォルトでは、symfonyの2.xのchoicesに他の方法で回避が構築されています。したがって、配列の最初の要素が0になります。 :)

また、ChoiceTypeの代わりにEntityType classを使用することもできます。いずれにしても実際のオブジェクトは関数に渡されます。あなたがラベルとしてエンティティのプロパティ(または参照エンティティ)を指定したい場合は

さらに、あなたもproperty paths使用することができます。

'choice_label' => 'name' 
+0

ありがとうございます、choices_as_valuesが私の問題を解決しました! – user1386893

関連する問題