小编9le*_*lex的帖子

Symfony / API 平台 - 自定义操作 - 使用 VichUploaderBundle 进行文件替换的 PUT 方法

我将 Vich Uploader Bundle 与 API Platform 结合使用来存储文件。我已按照官方文档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"={
 * …
Run Code Online (Sandbox Code Playgroud)

php rest symfony vichuploaderbundle api-platform.com

5
推荐指数
1
解决办法
2539
查看次数

API 平台 - onPreSerialize 与标准化组中的 MediaObject URI 解析器

我有一个 MediaObject 作为规范化上下文组“模块”中的子资源公开:

/**
 * @ApiResource(
 *     attributes={"access_control"="is_granted('ROLE_ADMIN')"},
 *     collectionOperations={
 *          "get",
 *          "post",
 *          "allData"={
 *              "method"="GET",
 *              "path"="/appdata",
 *              "normalization_context"={"groups"={"modules"}},
 *              "access_control"="is_granted('IS_AUTHENTICATED_ANONYMOUSLY')"
 *          }
 *     }
 * )
 * @ORM\Entity(repositoryClass="App\Repository\LearningModuleRepository")
 * @UniqueEntity("identifier")
 *
 */
class LearningModule
Run Code Online (Sandbox Code Playgroud)
/**
 * @ORM\Entity(
 *     repositoryClass="App\Repository\MediaObjectRepository"
 * )
 * @ApiResource(
 *     iri="http://schema.org/MediaObject",
 *     normalizationContext={
 *         "groups"={"media_object_read"},
 *     },
 *     attributes={"access_control"="is_granted('ROLE_ADMIN')"},
 *     collectionOperations={
 *         "post"={
 *             "controller"=CreateMediaObject::class,
 *             "deserialize"=false,
 *             "validation_groups"={"Default", "media_object_create"},
 *             "swagger_context"={
 *                 "consumes"={
 *                     "multipart/form-data",
 *                 },
 *                 "parameters"={
 *                     { …
Run Code Online (Sandbox Code Playgroud)

symfony api-platform.com

3
推荐指数
1
解决办法
413
查看次数