Api 平台,当某些数据相同时阻止 POST 方法

Api platform, prevent POST method when some datas are the same

我将 symfony 与 API PLATFORM 一起使用来创建联系人共享系统:

一个用户可以将一个或多个联系人共享给一个或多个其他用户。

我创建了 ContactShare 实体:

/**
 * @ApiResource()
 * @ORM\Entity(repositoryClass=ContactShareRepository::class)
 */
class ContactShare
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity=Contact::class, mappedBy="contactsToShare")
     */
    private $contacts;

    /**
     * @ORM\ManyToOne(targetEntity=AppUser::class, inversedBy="shareContactsOwner")
     */
    private $sender;

    /**
     * @ORM\OneToMany(targetEntity=AppUser::class, mappedBy="shareContactsReceivers")
     */
    private $receivers;
    
    ...
    ...

}

当我用 postman 测试时,我可以 post 一个新的分享:

我的问题是:

如果我们

,如何添加约束或验证器以防止POST 联系人共享方法

向同一用户共享相同的联系人,如果我们发送相同的

,则阻止 POST 方法

与重复的用户联系?

您可以创建 custom validator and call valid as shown here.

如果验证 return 有一个(或多个)错误,您应该 return 某种具有正确 HTTP 状态代码(4xx?)的响应。

此外,如果仅针对此 API 调用执行此验证(我认为这是域要求,因此应该始终应用它,但这只是我的猜测)您可以利用共 validation groups.

更新:API 平台 seems to take care of this on your behalf,因此您无需显式调用 valid