猿问

使用 VichUploaderBundle 进行文件替换的 PUT 方法

我将 Vich Uploader Bundle 与 API 平台结合使用来存储文件。我已按照官方文档https://api-platform.com/docs/core/file-upload/#handling-file-upload 中的说明进行操作


除了我想包含 PUT 调用来替换现有的 MediaObject 实体外,一切都运行良好。我的尝试如下:


我创建了一个自定义操作并将其映射到实体中的 PUT 方法,如下所示:



<?php

// api/src/Entity/MediaObject.php


namespace App\Entity;


use ApiPlatform\Core\Annotation\ApiProperty;

use ApiPlatform\Core\Annotation\ApiResource;

use App\Controller\CreateMediaObject;

use App\Controller\EditMediaObject;

use Doctrine\ORM\Mapping as ORM;

use Symfony\Component\HttpFoundation\File\File;

use Symfony\Component\Serializer\Annotation\Groups;

use Symfony\Component\Validator\Constraints as Assert;

use Vich\UploaderBundle\Mapping\Annotation as Vich;


/**

 * @ORM\Entity

 * @ApiResource(

 * 

 *     ...

 * 

 *     itemOperations={

 *         "get",

 *         "put"={

 *             "controller"=EditMediaObject::class,

 *             "deserialize"=false,

 *             "validation_groups"={"Default", "media_object_create"},

 *             "swagger_context"={

 *                 "consumes"={

 *                     "multipart/form-data",

 *                 },

 *                 "parameters"={

 *                     {

 *                         "in"="formData",

 *                         "name"="file",

 *                         "type"="file",

 *                         "description"="The file to upload",

 *                     },

 *                 },

 *             },

 *         },

 *         "delete"

 *     },

 * )

 * @Vich\Uploadable

 */

class MediaObject

{

    /**

     * @var int|null

     *

     * @ORM\Column(type="integer")

     * @ORM\GeneratedValue

     * @ORM\Id

     */


慕哥6287543
浏览 241回答 3
3回答

慕桂英4014372

你为什么在看$request->attributes?你应该看看$request->files.见https://symfony.com/doc/current/components/http_foundation.html#accessing-request-data

POPMUISE

我最近遇到了一个非常相似的问题,不过,我没有使用整个 symfony 库,我使用的是HttpFoundation/Request和HttpFoundation/Response对象。起初我对这个请求似乎完全是空的感到困惑。在花费了比我想要的更多的时间来研究它之后,这是一个可以追溯到 PHP 内部的问题。我设法找到了这个 PECL 扩展我对 pecl 不是很熟悉,而且似乎无法使用 pear 让它工作。但我使用的是 CentOS 和 Remi PHP,它们有一个 yum 包。我跑了yum install php-pecl-apfd,它确实立即解决了这个问题。我相信还有其他各种风格的 linux 包,我相信任何对 pear/pecl/general php 扩展有更多了解的人都可以让它在 windows 或 mac 上毫无问题地运行。通过固定的,我的意思是,我的要求对象是人口预期(request->all()和request->files举例)。这似乎已经工作了两个PUT,并PATCH要求有和没有文件(使用多联表格)。如果您使用 Docker,则需要重新启动容器。

largeQ

您需要发送一个带有额外参数_method = PUT的 POST 请求,它会像 PUT 请求一样更改 POST 请求。
随时随地看视频慕课网APP
我要回答