猿问

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

我正在使用 Symfony 5。


我希望每个登录用户在 EasyAdmin 3 中都有自己的空间,这样任何用户都不会看到其他用户的记录。我将用户与数据库中的每个表一起存储。


对于简单的列表视图,我设法使用以下扩展使其工作AbstractCrudController:


<?php

namespace 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'),并且在填充下拉列表时它会忽略我的新功能。因此您将看到属于另一个用户的记录。


如何覆盖这些下拉列表以仅显示属于当前用户的数据?


至尊宝的传说
浏览 90回答 1
1回答

慕勒3428872

我找到了解决方案:将自定义查询传递给EntityTypeSymfony 的底层字段。AssociationField::new('food')&nbsp; &nbsp; ->setRequired(true)&nbsp; &nbsp; ->setFormTypeOptions(['query_builder' => function (EntityRepository $em) {&nbsp; &nbsp; return $em->createQueryBuilder('f')&nbsp; &nbsp; &nbsp; &nbsp; ->where('f.user = :user')&nbsp; &nbsp; &nbsp; &nbsp; ->orderBy('f.title', 'ASC')&nbsp; &nbsp; &nbsp; &nbsp; ->setParameter('user', $this->getUser())&nbsp; &nbsp; &nbsp; &nbsp; ;}]),
随时随地看视频慕课网APP
我要回答