为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕哥6287543 2021-12-24 15:17:08
我将 Vich Uploader Bundle 与 API 平台结合使用来存储文件。我已按照官方文档https://api-platform.com/docs/core/file-upload/#handling-file-upload 中的说明进行操作除了我想包含 PUT 调用来替换现有的 MediaObject 实体外,一切都运行良好。我的尝试如下:我创建了一个自定义操作并将其映射到实体中的 PUT 方法,如下所示:<?php// api/src/Entity/MediaObject.phpnamespace 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     */
查看完整描述

3 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

你为什么在看$request->attributes?你应该看看$request->files.

https://symfony.com/doc/current/components/http_foundation.html#accessing-request-data


查看完整回答
反对 回复 2021-12-24
?
POPMUISE

TA贡献1765条经验 获得超5个赞

我最近遇到了一个非常相似的问题,不过,我没有使用整个 symfony 库,我使用的是HttpFoundation/RequestHttpFoundation/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,则需要重新启动容器。


查看完整回答
反对 回复 2021-12-24
?
largeQ

TA贡献2039条经验 获得超8个赞

您需要发送一个带有额外参数_method = PUT的 POST 请求,它会像 PUT 请求一样更改 POST 请求。


查看完整回答
反对 回复 2021-12-24
  • 3 回答
  • 0 关注
  • 239 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号