我想要创建一个路由,它将返回我的一个实体的列表,其中只有一些字段。
我认为它可以通过序列化组来实现,但也许这不是最简单的方法。
因此,我想简单地添加一个名为special_get
的新的自定义路由,以便对normalization_group
user:special
进行测试,如下所示:
/**
* @ApiResource(
* attributes={
* "normalization_context"={"groups"={"user:read", "user:list", "user:special"}},
* "denormalization_context"={"groups"={"user:write"}},
* "order"={"availabilities.start": "ASC"}
* },
* collectionOperations={
* "get"={
* "mehtod"="GET",
* "security"="is_granted('ROLE_USER')",
* "normalization_context"={"groups"={"user:list"}},
* },
* "special_get"={
* "method"="GET",
* "path"="/user/specialroute",
* "normalization_context"={"groups"={"user:special"}}
* },
* }
* )
* @ORM\Entity(repositoryClass=UserRepository::class)
*/
并仅将此group
应用于我希望返回的几个字段:
/**
* @ORM\Column(type="boolean")
* @Groups({"user:read", "user:list", "user:write", "user:special"})
*/
private $firstName;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"user:write", "user:read", "user:list", "user:special"})
*/
private $photo;
/**
* @ORM\OneToMany(targetEntity=Availability::class, mappedBy="entityname", cascade={"remove"})
* @Groups({"user:read", "user:list", "user:write"})
* @ApiSubresource()
*/
private $availabilities;
这确实为我在swagger界面上创建了一个我想要的新路径,但是我得到了一个500
,上面写着:
An error occured
Cannot select distinct identifiers from query with LIMIT and ORDER BY on a column from a fetch joined to-many association. Use output walkers.*
有没有人知道这个错误是从何而来的?
或者,如果有更好的方法来实现只恢复几个字段,在一个特殊的路径上形成一个实体?
谢谢!
发布于 2020-12-04 06:32:20
因此,关于错误消息,您的问题是order
属性中的orders由availabilities.start
属性导致,而该属性没有添加到您的规范化组中。
所以你必须在这里找到方法:
availabilities
属性添加到规范化组据我所知,api-platform目前不支持为每个操作排序属性,似乎不应该。
发布于 2022-06-29 02:10:43
您可以使用PropertyFilter,以便选择特定的字段
启用过滤器:
* @ApiFilter(PropertyFilter::class)
导入类use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
现在,您可以使用以下查询筛选序列化属性:
?properties[]=title&properties[]=shortDescription
您可以根据需要添加任意数量的属性。
https://stackoverflow.com/questions/65144601
复制相似问题