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
我将 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