我正在使用 Symfony 5。我希望每个登录用户在 EasyAdmin 3 中都有自己的空间,这样任何用户都不会看到其他用户的记录。我将用户与数据库中的每个表一起存储。对于简单的列表视图,我设法使用以下扩展使其工作AbstractCrudController:<?phpnamespace App\Controller\Admin;use Doctrine\ORM\QueryBuilder;use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;use EasyCorp\Bundle\EasyAdminBundle\Orm\EntityRepository;abstract class CustomCrudController extends AbstractCrudController{ public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder { $qb = $this->get(EntityRepository::class)->createQueryBuilder($searchDto, $entityDto, $fields, $filters); $qb->andWhere('entity.user = :user'); $qb->setParameter('user', $this->getUser()); return $qb; }}我还通过EventSubscriber.问题是,某些表单与另一个实体(例如 )有关系AssociationField::new('food'),并且在填充下拉列表时它会忽略我的新功能。因此您将看到属于另一个用户的记录。如何覆盖这些下拉列表以仅显示属于当前用户的数据?
1 回答
慕勒3428872
TA贡献1848条经验 获得超6个赞
我找到了解决方案:将自定义查询传递给EntityTypeSymfony 的底层字段。
AssociationField::new('food')
->setRequired(true)
->setFormTypeOptions(['query_builder' => function (EntityRepository $em) {
return $em->createQueryBuilder('f')
->where('f.user = :user')
->orderBy('f.title', 'ASC')
->setParameter('user', $this->getUser())
;
}]),
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报
0/150
提交
取消