如何解决Symfony 5 未验证多个独立的唯一字段
想象一下 DB Users 表中的这个场景:
/**
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @Gedmo\SoftDeleteable(fieldName="deletedAt",timeAware=false)
* @UniqueEntity(fields={"email"},groups={"register","edit"})
* @UniqueEntity(fields={"username"},"edit"})
*/
class User implements UserInterface
{
/**
* @Route("/register",name="api_auth_register",methods={"POST"})
* @return JsonResponse|RedirectResponse
*/
public function register(
Request $request,EntityManagerInterface $entityManager,CustomSerializer $serializer,ValidatorInterface $validator,UserPasswordEncoderInterface $passwordEncoder
) {
$user = $serializer->serializer->deserialize($request->getContent(),User::class,'json');
assert($user instanceof User);
$errors = $validator->validate($user,null,'register');
if ($errors->count() !== 0) {
return new JsonResponse(
$serializer->serializer->serialize($errors,'json'),Response::HTTP_UNPROCESSABLE_ENTITY,[],true,);
}
$user->setPassword($passwordEncoder->encodePassword($user,$user->getpassword()));
$entityManager->persist($user);
$entityManager->flush();
return $this->json([],Response::HTTP_CREATED);
}
当我发送此有效负载时:
{
"username": "aykon","email": "aykon@aykon.sk","password": "password"
}
我得到了正确的 422
响应,错误是用户名和电子邮件已被使用!
但是当我发送这个:
{
"username": "aykon94","password": "password"
}
这在注册期间不是大问题,因为当我更改电子邮件以通过验证 smt 时,例如 aykon199@aykon.sk
,它会在用户名上显示验证错误。我可以忍受。
但是当我尝试编辑用户例如 aykon
时,这意味着我已经在数据库中拥有用户名和电子邮件,并且我仅将用户名更改为 aykon94
,验证在非唯一电子邮件 {{1} 处停止它忽略它,因为它是同一个对象。我从 DB 收到错误
aykon@aykon.sk
编辑: 提供编辑功能:
sqlSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint Failed: users.username"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。