当我尝试将PUT
与“自定义操作”一起使用时,显示“提供的值无效(IRI无效?)”。因为ApiPlatform
尝试返回请求的正文(请参见https://github.com/api-platform/core/blob/master/src/EventListener/DeserializeListener.php#L98)。
尝试更新实体(PUT)。
* itemOperations={
* "dms_document_update_item"={
* "method"="PUT",
* "path"="/dms/document/{id}/update",
* "controller"=\CoreBundle\ApiPlatform\DataProvider\DmsActions\Document\UpdateItemAction::class,
* "swagger_context" = {
* "summary"="Update a document",
* "parameters" = {
* {
* "name" = "id",
* "in" = "path",
* "required" = true,
* "type" = "string",
* "description" = "Id"
* },
* {
* "name" = "tags",
* "in" = "body",
* [cutted because of "to much code"]
* }
* },
* },
* }
* },
,然后执行以下操作(我删除了该问题,因为它不是重要的内容,以使其更具可读性;)。
<?php
// [namespace, use a.s.o.]
class UpdateItemAction extends DmsDataProviderActionBase implements DmsDataProviderActionInterface
{
protected $supportedOperation = 'dms_document_update_item';
private $document;
/**
* @return array|mixed
*/
public function getResult()
{
[stuff to update document]
$document = $this->getLatestDocument();
return $document;
}
}
更新工作正常...但是当我返回文档时,我得到
"Invalid value provided (invalid IRI?)."
我在找到的文件https://github.com/api-platform/core/blob/master/src/EventListener/DeserializeListener.php#L98中对其进行调试
$request->attributes->set(
'data',
$this->serializer->deserialize(
$requestContent, $attributes['resource_class'], $format, $context
)
);
但是为什么从一开始就将正文作为Data返回?如何退回我自己的内容? 在我看来,返回的数据必须是操作(而不是请求正文)返回的数据。如何解决问题并返回我自己的数据?
我也尝试“ _api_receive_ = false”。但是__invoke方法将被称为...并且依赖注入将起作用。