为了账号安全,请及时绑定邮箱和手机立即绑定

EasyAdmin 3:限制登录用户的数据仍然在表单下拉列表中显示其他数据

EasyAdmin 3:限制登录用户的数据仍然在表单下拉列表中显示其他数据

PHP
至尊宝的传说 2023-10-15 15:08:48
我正在使用 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())

        ;

}]),


查看完整回答
反对 回复 2023-10-15
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信