自定义PUT请求和响应

时间:2019-06-24 14:34:02

标签: api-platform.com

当我尝试将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方法将被称为...并且依赖注入将起作用。

0 个答案:

没有答案