symfony 为什么无法访问EasyAdmin中的分页器DTO?

1l5u6lss  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(164)

我正在尝试访问Crud控制器中的EasyCorp\Bundle\EasyAdminBundle\Dto\PaginatorDto

public function __construct(
        private EntityManagerInterface $manager,
        private EntityRepository $entityRepository,
        private PaginatorDto $paginatorDto,
    ) {
    }

但我有这个错误=〉Cannot autowire service "App\Controller\Activity\ActivityCrudController": argument "$paginatorDto" of method "__construct()" references class "EasyCorp\Bundle\EasyAdminBundle\Dto\PaginatorDto" but no such service exists.,我不明白为什么和如何修复它:(
你知道吗?

bvjveswy

bvjveswy1#

我不是这个包的Maven,所以对我的答案持保留态度,但是在查看包的代码时,我注意到PaginatorDto不是一个服务(顾名思义)。
由于DTO不是一项服务(它不是也没关系),因此您不能自动连接它,也不能使它成为“本地”服务(例如:)。
因此,为了检索DTO对象,请改为注入AdminContextProvider(正如您在这里所注意到的,这是一个服务),并使用它来获取DTO

$adminContext->getCrud()->getPaginator();
bvjveswy

bvjveswy2#

您的crud控制器应该扩展AbstractCrudController,它给予您访问当前的管理上下文。
因此,如果你想在你的crud控制器方法中使用它,你应该能够访问paginator:

$paginator = $this->getContext()->getCrud()->getPaginator();

如果你想在你的crud控制器之外做同样的事情,让我们假设在另一个服务中,你需要注入AdminContextProvider,首先得到AdminContext,然后以同样的方式做。

private ?AdminContext $siteRepository;

public function __construct(AdminContextProvider $adminContextProvider)
{
    $this->adminContext = $adminContextProvider->getContext();
}

相关问题