Symfony EasyAdminBundle:在assotiation字段中过滤实体

fad*_*lix 6 entity symfony-forms symfony doctrine-orm symfony2-easyadmin

我有一个带有assotation字段类型的表单(相关实体列表).

我一直试图实现的是在"newAction"表单上过滤此列表(创建新实体).

例如,以下屏幕:

  1. 有一个调查实体,其字段为"用户".
  2. 有部门实体,其中包含用户选择调查的字段"调查"(@ORM\ManyToOne).

您可以看到两个可用的调查,但我只想显示第一个,因为其User字段值与当前用户相同.

在此输入图像描述

这很令人困惑,因为我在调试时无法找到传递给Survey字段的值.

May*_*hah 5

最好的方法是覆盖默认控制器,然后将查询生成器应用于这种形式。

YML:-

easy_admin:
    entities:
        Department:
            class: YourBundle\Entity\Department
            controller: YourBundle\Controller\Admin\Model\DepartmentController
Run Code Online (Sandbox Code Playgroud)

在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;
    }
}
Run Code Online (Sandbox Code Playgroud)