我有一个带有关联字段类型(相关实体列表)的表单。
我一直在努力实现的是在“newAction”表单上过滤这个列表(创建新实体)。
例如,下面的屏幕:
- 有一个带有“用户”字段的调查实体。
- 有一个部门实体,其字段为“调查”(@ORM\ManyToOne),用户在其中选择调查。
您可以看到两个可用的调查,但我只想显示第一个,因为它的用户字段值与当前用户相同。
这很令人困惑,因为我在调试时找不到传递给“调查”字段的值。
我有一个带有关联字段类型(相关实体列表)的表单。
我一直在努力实现的是在“newAction”表单上过滤这个列表(创建新实体)。
例如,下面的屏幕:
您可以看到两个可用的调查,但我只想显示第一个,因为它的用户字段值与当前用户相同。
这很令人困惑,因为我在调试时找不到传递给“调查”字段的值。
最好的方法是覆盖默认控制器并为这样的表单应用查询生成器。
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;
}
}
我的解决方案:
$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 属性。