6

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

我一直在努力实现的是在“newAction”表单上过滤这个列表(创建新实体)。

例如,下面的屏幕:

  1. 有一个带有“用户”字段的调查实体。
  2. 有一个部门实体,其字段为“调查”(@ORM\ManyToOne),用户在其中选择调查。

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

在此处输入图像描述

这很令人困惑,因为我在调试时找不到传递给“调查”字段的值。

4

2 回答 2

7

最好的方法是覆盖默认控制器并为这样的表单应用查询生成器。

YML:-

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;
    }
}
于 2017-02-15T12:11:37.213 回答
0

我的解决方案:

$formBuilder = parent::createEntityFormBuilder($entity, $view);
    if (!$this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')) {
        $user = $this->get('security.token_storage')->getToken()->getUser();
        $promoter = $this->getDoctrine()
            ->getRepository(Promoter::class)
            ->findByUser($user);
        $queryBuilder = $this->getDoctrine()
            ->getRepository(Customer::class)
            ->getActiveByPromoterQueryBuilder($promoter);
        $formBuilder->add(
            'customers', EntityType::class, [
                'class' => Customer::class,
                'query_builder' => $queryBuilder,
                "attr" => ["class" => "form-control select2", "data-widget" => "select2"],
                'by_reference' => false,
                'multiple' => true,
                'required' => false
            ]
        );
    }
    return $formBuilder;
}

根据 'vendor/easycorp/easyadmin-bundle/src/Resources/views/default/includes/_select2_widget.html.twig' 我们只需要添加 data-widget 属性。

于 2019-01-07T16:59:52.373 回答