gpt4 book ai didi

php - 在 collectionOperations (GET) 上使用 Symfony 选民

转载 作者:行者123 更新时间:2023-12-05 03:56:50 28 4
gpt4 key购买 nike

我想在 API PLATFORM 中使用 symfony 选民。当我在 itempsOperations(GET、PUT、DELETE)上使用它时没有任何问题,但是当我在 collectionOperations 中使用它时,尤其是在 GET 中(POST 效果很好) ,我无法访问 $subject,因为在 GET 操作中,API PLATFORM 返回“ApiPlatform\Core\Bridge\Doctrine\Orm\Paginator”的实例,而不是实体对象。

* @ApiResource(
* collectionOperations={
* "GET"={
* "access_control"="is_granted('GET', object)",
* },
* "POST"={
* "access_control"="is_granted('ADD', object)",
* }
* }
* )

我该如何解决这个问题?

最佳答案

我遇到了同样的问题,不知道这是功能还是错误。因为我们基本上是在要求一组这样的资源。考虑到这一点,我猜分页对象是有意义的。

解决此问题的方法如下:


@\Entity\YourEntity.php

* @ApiResource(
* collectionOperations={
* "GET"={
* "access_control"="is_granted('GET', _api_resource_class)",
* },
* }
* )

@\Security\Voter\YourVoter.php
/**
* Determines if the attribute and subject are supported by this voter.
*
* @param string $attribute An attribute
* @param mixed $subject The subject to secure, e.g. an object the user wants to access or any other PHP type
*
* @return bool True if the attribute and subject are supported, false otherwise
*/
protected function supports($attribute, $subject)
{


// If the subject is a string check if class exists to support collectionOperations
if(is_string($subject) && class_exists($subject)) {
$subject = new $subject;
}

if(in_array($attribute, ['GET'])
&& $subject instanceof YourEntity) {
return true;
}

关于php - 在 collectionOperations (GET) 上使用 Symfony 选民,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59051663/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com