2016-03-19 15 views
0

私はフォームビルダーの - >追加の前に実行されたクエリの配列値を使ってSymfonyの選択肢を入力しようとしています。ダンプ($カテゴリ)が適切な値を示しているにもかかわらず、私の人生は実際のラベルや価値を得ることができません。ドロップダウンにはわずか0,1,2が入力されます。 Categoryには - > getNameと - > getIdが含まれていますが、これらは参照できません。Symfonyの選択肢配列からのラベル

$categories = $em->getRepository('AppBundle:Category') 
     ->createQueryBuilder('t') 
     ->where('t.userCreate = :user_id') 
     ->andWhere('t.type = :catType') 
     ->setParameter('user_id',$userID) 
     ->setParameter('catType',$type) 
     ->getQuery() 
     ->getResult(); 

    $builder 
     ->add('taskCategory', 'choice', array(
      'choices' => $categories, 
      'placeholder' => 'Choose a category', 
      'choices_as_values' => true, 

      )) 
+0

「エンティティ」フォームタイプを使用しない特別な理由はありますか? – Artamiel

+0

私は2番目のパラメータの概念をあまり理解していませんでした。フォームオブジェクトとしてドロップダウンリストを生成するには、「選択」が必須であると思っていました。 – Lee

+0

'entity'はDoctrineBridgeバンドルの一部であり、' choice'型のための特別な機能と簡単なコメントで説明できない多くの魔法を追加します。 Btwでは、 '$ options'でカテゴリを渡すのではなく、' entity'型を使っているので、追加のオプション 'query_builder'をインクルードして、あなたのクエリにコールバックを渡すことができます - http://symfony.com/doc /current/reference/forms/types/entity.html#using-a-custom-query-for-the-entities – Artamiel

答えて

1

ここで私はこの問題を解決しました。

->add('taskCategory','entity',array(
      'class'=>'AppBundle\Entity\Category', 
      'choices'=>$this->fillCategories($options), 
      'choice_value'=>'id', 
      'choice_label'=>'name', 

     )) 

"fillCategories"関数は、必要なデータを返したところです。ここでの鍵は、 - > addに 'choice'の代わりに 'entity'という型を指定することでした。

$categories = $em->getRepository('AppBundle:Category') 
     ->createQueryBuilder('t') 
     ->where('t.userCreate = :user_id') 
     ->andWhere('t.type = :catType') 
     ->setParameter('user_id',$userID) 
     ->setParameter('catType',$type) 
     ->getQuery() 
     ->getResult(); 

    return $categories; 
関連する問題