4

私はアソテーションフィールドタイプ(関連エンティティのリスト)を持つフォームを持っています。Symfony EasyAdminBundle:アソシエーションフィールドのエンティティをフィルタリングします

私が達成しようとしてきたことは、このリストを "newAction"フォーム(新しいエンティティの作成)でフィルタリングすることでした。

例えば、以下のような画面次

  1. フィールド「ユーザー」との調査エンティティがあります。
  2. ユーザが調査を選択するフィールド「調査」(@ORM \ ManyToOne)を持つDepartmentエンティティがあります。

利用可能なアンケートが2つ表示されますが、そのユーザーフィールドの値が現在のユーザーと同じであるため、最初のアンケートのみを表示します。

enter image description here

私はデバッグの際に調査フィールドに渡された値を見つけることができないので、混乱しています。

+0

https://github.com/javiereguiluz/EasyAdminBundle/issues/1145 – yceruto

答えて

2

最も良い方法は、デフォルトのコントローラをオーバーライドし、このようなフォームにクエリビルダーを適用することです。

YML: - DepartmentControllerで

easy_admin: 
    entities: 
     Department: 
      class: YourBundle\Entity\Department 
      controller: YourBundle\Controller\Admin\Model\DepartmentController 

: -

<?php 

namespace YourBundle\Controller\Admin\Model; 

use Doctrine\ORM\EntityRepository; 
use Doctrine\ORM\QueryBuilder; 
use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use JavierEguiluz\Bundle\EasyAdminBundle\Controller\AdminController; 

class DepartmentController extends AdminController 
{ 
    public function createDepartmentEntityFormBuilder($entity, $view) 
    { 
     $formBuilder = parent::createEntityFormBuilder($entity, $view); 

     $user = $this->get('security.token_storage')->getToken()->getUser(); 

     $formBuilder->add('survey', EntityType::class, [ 
      'class' => 'YourBundle\Entity\Survey', 
      'query_builder' => function (EntityRepository $er) { 
       return $er->createQueryBuilder('s') 
        ->where('s.user = :user') 
        ->setParameter('user', $user); 
      }, 
     ]); 

     return $formBuilder; 
    } 
} 
関連する問題