【发布时间】:2019-04-12 20:02:57
【问题描述】:
我想使用 PUT 方法来创建资源。它们由 UUID 标识,并且由于可以在客户端创建 UUID,因此我想启用以下行为:
- 在 PUT /api/myresource/4dc6efae-1edd-4f46-b2fe-f00c968fd881 上,如果此资源存在,请更新它
- 在 PUT /api/myresource/4dc6efae-1edd-4f46-b2fe-f00c968fd881 上,如果此资源不存在,则创建它
可以通过实现ItemDataProviderInterface / RestrictedDataProviderInterface 来实现。
但是,我的资源实际上是一个子资源,所以假设我想创建一个新的 Book 引用现有的 Author。
我的构造函数如下所示:
/**
* Book constructor
*/
public function __construct(Author $author, string $uuid) {
$this->author = $author;
$this->id = $uuid;
}
但我不知道如何从我的BookItemProvider 访问Author 实体(在请求正文中提供)。
有什么想法吗?
【问题讨论】:
-
我可能离这里很远,我既不知道 api-platform.com 也不知道
ItemDataProviderInterface。但如果我理解正确,Author与Book有一对多的关系?在那种情况下,也许在AuthorType中应该有书籍作为CollectionType并包括'allow_add'' => true。 -
在快速查看了看起来很棒的 api-platform.com 之后,我相信我上面的答案完全是垃圾。请忽略它。
-
我认为您需要查看 Api-Platform event system 并使用它自定义 PUT 请求。