API 平台不可变属性

我在 Symfony 4.3 项目上使用 API 平台,我只想拥有一个不可变的属性(userId在这种情况下),它可以在 POST 上设置但不能用 PUT 更改。到目前为止,完成此操作的唯一方法是删除userIdsetter 并使用构造函数来初始设置值。

这个设置仍然在Swagger for PUT 中显示属性(下图),但更麻烦的是它接受该属性而不修改记录。这是一个无声的忽略,我更喜欢 400 Bad Request 返回代码,让客户知道他的请求没有按预期处理。

http://img4.mukewang.com/6184ba240001265e03280238.jpg

有没有其他方法可以用 API 平台完成类似的行为?已经尝试过序列化组,但可能设置错误。


<?php

declare(strict_types = 1);


namespace App\Entity;


use ApiPlatform\Core\Annotation\ApiFilter;

use ApiPlatform\Core\Annotation\ApiResource;

use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\NumericFilter;

use Doctrine\ORM\Mapping as ORM;


/**

 * @ORM\Entity(repositoryClass="App\Repository\SubscriptionRepository")

 *

 * @UniqueEntity("userId")

 *

 * @ApiResource()

 */

class Subscription

{

    /**

     * @var int

     *

     * @ORM\Id()

     * @ORM\GeneratedValue()

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

     */

    private $id;


    /**

     * @var int

     *

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

     *

     * @ApiFilter(NumericFilter::class)

     */

    private $userId;


    /**

     * Subscription constructor.

     *

     * @param int $userId

     */

    public function __construct(int $userId)

    {

        $this->userId = $userId;

    }


    ...

?>


波斯汪
浏览 176回答 1
1回答

12345678_0001

我认为您需要将normalization_context.groupsPUT 请求显式设置为{"read"}(或其他内容,具体取决于您的配置)。请参阅操作文档
打开App,查看更多内容
随时随地看视频慕课网APP