EasyAdmin 3:如何基于 dql 为 CRUD 索引显示实体
Posted
技术标签:
【中文标题】EasyAdmin 3:如何基于 dql 为 CRUD 索引显示实体【英文标题】:EasyAdmin 3: How to display entities based on dql for CRUD index 【发布时间】:2021-08-26 05:39:16 【问题描述】:我有一个名为 Page 的实体,它可以是 callToAction(布尔值),我想在一个子菜单上显示带有 callToAction == false 的页面实体,在另一个子菜单上显示带有 callToAction == true 的页面实体。我有一个页面实体的 CRUD。所以仪表板应该是这样的:
MenuItem::subMenu('Page', 'far fa-file-alt')->setSubItems([
MenuItem::linkToCrud('Page', 'fa fa-alt', Page::class),
MenuItem::linkToCrud('Call To Action', 'fa fa-file-alt', Page::class),
])
但我不知道将 dql 放在哪里来显示我想要的实体(callToAction 真或假),我什至不知道这是否可能,但我知道这是使用 Easy Admin 2,这就是为什么我想知道。 我也希望在 NEW Action 上这样做,当您在带有 callToAction == true 的页面上时,当您从这里创建新的实体页面时,callToAction 立即设置为 true 并且用户甚至看不到场地。还是不知道有没有可能。 谢谢:)
编辑:所以我发现我可以使用 createIndexQueryBuilder() 在索引上准确显示实体,并且效果很好,但我不知道如何根据我们显示的子菜单调用两个不同的 createIndexQueryBuilder。我尝试执行自定义操作并使用 createQueryBuilder,但我没有参数 searchDto 等:
public function configureActions(Actions $actions): Actions
$indexIsCallToAction = Action::new('indexIsCallToAction', 'Index Call To Action', 'fa fa-send')
->linkToCrudAction('indexIsCallToAction');
$actions->add(CRUD::PAGE_INDEX, $indexIsCallToAction);
return $actions;
//return parent::configureActions($actions); // TODO: Change the autogenerated stub
public function indexIsCallToAction(AdminContext $context,SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters)
$response = $this->get(EntityRepository::class)->createQueryBuilder($searchDto, $entityDto, $fields, $filters);
return $response;
所以它不起作用。
【问题讨论】:
【参考方案1】:仪表板控制器是一个普通的控制器,你可以这样做:
public function __construct(PageRepository $pageRepo)
$this->pageRepo = $pageRepo;
public function configureMenuItems(): iterable
$submenuItems = [];
if (null !== $pages = $this->pageRepo->findBy(["callToAction" => true ]))
foreach ($pages as $page)
$submenuItems[] = MenuItem::linkToCrud('Call To Action', 'fa fa-file-alt', Page::class);
yield MenuItem::subMenu('Page Submenu with callToAction', 'far fa-file-alt')->setSubItems($submenuItems);
$submenuItems = [];
if (null !== $pages = $this->pageRepo->findBy(["callToAction" => false ]))
foreach ($pages as $page)
$submenuItems[] = MenuItem::linkToCrud('Page', 'fa fa-alt', Page::class);
yield MenuItem::subMenu('Other Page Submenu', 'far fa-file-alt')->setSubItems($submenuItems);
【讨论】:
以上是关于EasyAdmin 3:如何基于 dql 为 CRUD 索引显示实体的主要内容,如果未能解决你的问题,请参考以下文章
EasyAdmin 3翻译错误,“翻译”字段的Doctrine类型为“4”,EasyAdmin尚不支持
如何在 Symfony EasyAdmin 3 中创建密码输入类型
类 DateTime 的 EasyAdmin 3 对象无法转换为字符串