2016-05-09 4 views
1

私は現在EasyFminとFOSUserBundleの2つのメインバンドルを持つSymfonyアプリケーション(v2.8)を開発中です。機能を使用してフォームを選択するsymfony 2

私は特定の役割を持つユーザーがおり、私はそれらのユーザーを取得するために配列で 'findBy'を使用しています。

私は自分の管理コントローラのフォームをオーバーライドして、これらのユーザーの選択フォームの選択肢を記入したいと考えています。私はそれが配列でそれを行うことは可能ですが、私はいくつかのユーザーを追加または削除すると、動的な何かをしたい知っている。

クエリからフォームを選択するための選択肢を追加するために、コントローラの1つから関数を呼び出す方法(またはサービスとして宣言する必要がありますか)がわかりません。ここで

は私が望むものの一例である:

$formBuilder->add('field_to_override', 'choice', array(
    'choices' => **my_function**, 
    'multiple' => true, 
    'expanded' => true, 
)); 

私は私が私の説明で明らかだ願っています。

ありがとうございます!

+0

ただ、フィールドタイプのための ' 'choice''のような文字列リテラルを使用すると、2.8で廃止されていることに注意する - 常にフィールドタイプのクラス名を使用して、例えば'ChoiceType :: class' –

答えて

3

EntityType fieldを使用することを検討してください。これは、Doctrineエンティティを選択肢として使用するChoiceフィールドの特殊な形式です。

選択肢としてcustom queryを指定することもできます。

$builder->add('users', EntityType::class, array(
    'class' => 'AppBundle:User', 
    'query_builder' => function (EntityRepository $er) { 
     return $er->createQueryBuilder('u') 
      ->orderBy('u.username', 'ASC'); 
    }, 
)); 
+0

こんにちは!ご協力ありがとうございました !私はこの解決策を試しましたが、例外が発生しています: 'オプション "class"、 "query_builde"は存在しません。 symfonyは私に可能なオプションを与えますが、 'class'と 'query_builder'に近いものはありません。 – Lucien

+0

これらのクラスを取得したことを確認してください。つまり、 'Doctrine \ ORM \ EntityRepositoryを使用してください。 symfony \ Bridge \ Doctrine \ Form \ Type \ EntityType;「 –

+0

」が動作しません。 Easy Adminバンドルが原因ではないのだろうか? Easy Adminは、config.ymlで指定したエンティティに従ってすべてのフォームを動的に作成しています 多分、このバンドルでは不可能です... – Lucien

関連する問題