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

API 平台不可变属性

API 平台不可变属性

PHP
波斯汪 2021-11-05 12:58:55
我在 Symfony 4.3 项目上使用 API 平台,我只想拥有一个不可变的属性(userId在这种情况下),它可以在 POST 上设置但不能用 PUT 更改。到目前为止,完成此操作的唯一方法是删除userIdsetter 并使用构造函数来初始设置值。这个设置仍然在Swagger for PUT 中显示属性(下图),但更麻烦的是它接受该属性而不修改记录。这是一个无声的忽略,我更喜欢 400 Bad Request 返回代码,让客户知道他的请求没有按预期处理。有没有其他方法可以用 API 平台完成类似的行为?已经尝试过序列化组,但可能设置错误。<?phpdeclare(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;    }    ...?>
查看完整描述

1 回答

?
12345678_0001

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

我认为您需要将normalization_context.groupsPUT 请求显式设置为{"read"}(或其他内容,具体取决于您的配置)。请参阅操作文档


查看完整回答
反对 回复 2021-11-05
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信