我正在使用 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 關注
- 118 瀏覽
添加回答
舉報
0/150
提交
取消