0

我有一个名为 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;
    }

所以它不起作用。

4

1 回答 1

0

由于仪表板控制器是普通控制器,您可以执行以下操作:

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);
}
于 2021-06-28T12:28:26.227 回答