【发布时间】:2018-11-03 11:55:38
【问题描述】:
我想用 Symfony Validator 验证我的用户对象 ($user) 并在表单输入数据有效/无效时返回 JsonResponse ($response)。 但是我有一个问题,当无法验证数据时我会自动注销。我必须再次登录,当某些数据无效时,这不是我所期望的行为。我找到了一种解决方法(见下面的 cmets),但这不是很令人满意:/
这是我的控制器的方法:
/**
* Update user profile data
*
* @Route("/api/users/updateprofile")
* @Security("is_granted('USERS_LIST')")
*/
public function apiProfileUpdate(ValidatorInterface $validator, FlashMessageBuilder $flashMessageBuilder)
{
$request = Request::createFromGlobals();
// Prepare Response
$response = new JsonResponse();
$response->setData([]);
/** @var User $user */
$user = $this->getUser();
$oldName = $user->getName();
$oldEmail = $user->getEmail();
$user->setName($request->request->get('name'));
$user->setEmail($request->request->get('email'));
$errors = $validator->validate($user);
if (count($errors) > 0) { // if this -> auto logout
$user->setName($oldName); // if I set the both attributes back to the old value
$user->setEmail($oldEmail); // then I don't get logged out automatically but this is just a workaround and not satisfying
$entityManager = $this->getDoctrine()->getManager(); // forgot to remove this
$entityManager->persist($user); // and this line, this is actually deleted in the real code
foreach ($errors as $error) {
$errorMessage = $error->getMessage();
$errorField = $error->getPropertyPath();
$flashMessageBuilder->addErrorMessage($errorMessage, $errorField);
};
return $response;
}
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
$flashMessageBuilder->addSuccessMessage("Success!");
return $response;
}
对不起,我的英语不好,提前谢谢你!
【问题讨论】:
标签: php symfony validation