我在 Symfony 4.3 项目上使用 API 平台,我只想拥有一个不可变的属性(userId
在这种情况下),它可以在 POST 上设置但不能用 PUT 更改。到目前为止,完成此操作的唯一方法是删除userId
setter 并使用构造函数来初始设置值。
这个设置仍然在Swagger for PUT 中显示属性(下图),但更麻烦的是它接受该属性而不修改记录。这是一个无声的忽略,我更喜欢 400 Bad Request 返回代码,让客户知道他的请求没有按预期处理。
有没有其他方法可以用 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;
}
...
?>
12345678_0001