API Platform 禁用读取时,可以通过配置序列化器来实现。
示例代码:
// 在实体类中定义序列化器
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\SerializedName;
class Book
{
/**
* @Groups({"book_read"})
*/
private $id;
/**
* @Groups({"book_read"})
*/
private $title;
/**
* @Groups({"book_read"})
* @SerializedName("content")
*/
private $text;
}
在 serialization.yaml
文件中定义序列化器:
# serialization.yaml
App\Entity\Book:
attributes:
id:
groups: ['book_read']
title:
groups: ['book_read']
text:
groups: ['book_read']
上述代码定义了一个 Book
实体类,并通过 Groups
注解和 serialization.yaml
文件配置,将 id
、title
、text
字段添加到 book_read
分组。这意味着当 API Platform 编组响应时,只有这些字段会被序列化并显示在响应中。
最后,在 src/Entity/Book.php
类的顶部使用 @ApiResource
注解:
use ApiPlatform\Core\Annotation\ApiResource;
/**
* @ApiResource(
* collectionOperations={
* "get"={"normalization_context"={"groups"={"book_read"}}},
* },
* itemOperations={
* "get"={"normalization_context"={"groups"={"book_read"}}},
* }
* )
*/
class Book
{
// …
}
这样,API Platform 将在运行时使用 serialization.yaml
文件定义的序列化器来确定哪些字段应该包含在响应中,并限制读取的范围。