2016-10-22 14 views
4

У меня есть форма с типом поля ассоциирования (список связанных объектов).Symfony EasyAdminBundle: Фильтрация объектов в поле ассоциирования

То, что я пытался достичь, это отфильтровать этот список в форме «newAction» (создать новую сущность).

Например, следующий экран ниже:

  1. Существует объект обследования с поля "User".
  2. Существует подразделение с полем «Обследование» (@ORM \ ManyToOne), где Пользователь выбирает опрос.

Вы можете просмотреть две доступные опросы, но я хочу отобразить только первый, поскольку его полевое значение пользователя совпадает с текущим пользователем.

enter image description here

Это сбивает с толку, потому что я не могу найти значения, передаваемые в поле Survey, когда я отладки.

+0

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

ответ

2

Лучший способ переопределить контроллер по умолчанию и применить построитель запросов к форме, подобной этой.

YML: -

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

В 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; 
    } 
}