问题描述
想象一下 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 (将#修改为@)