我正在创建一个简单的CRUD来管理一个应用程序的用户。用户由FOSUserBundle
创建和管理。此外,我不允许任何人编辑/更改username
和email
,因此我不会在正在编辑的表单中显示这些字段。这是我正在处理编辑的代码:
// Create the form and set the right data
public function editAction($id)
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('UserBundle:User')->find($id);
$form = $this->createForm(new UserType(), $user, array(
'action' => $this->generateUrl('update-user', array('id' => $id)),
'method' => 'POST',
));
return array(
'form' => $form->createView(),
'user' => $user
);
}
// Perform the update action and do the rest of the logic
public function updateAction(Request $request, $id = NULL)
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository("UserBundle:User")->find($id);
$form = $this->createForm(new UserType(), $user);
$form->handleRequest($request);
$response = array();
$response['status'] = TRUE;
if ($form->isValid())
{
$userManager = $this->container->get('fos_user.user_manager');
$userManager->updateUser($user);
$response['message'] = $this->get('translator')->trans('update.success', array('%element%' => 'el usuario'));
}
else
{
$response['message'] = $this->get('translator')->trans('update.fail', array('%element%' => 'el usuario'));
$response['error'] = $this->getFormErrors($form);
$this->get('ladybug')->log($response['error']);
$response['status'] = FALSE;
}
return new JsonResponse($response);
}
但由于username
和email
字段不存在,并且它们以某种方式进入更新操作,其中这些字段使用空值更新。我能想到解决这个问题的唯一方法是在发出handleRequest
之前从请求中删除这些参数,但我不知道如何,有什么帮助?
PS:欢迎任何比我更好的想法或对代码的任何建议!!
第一次测试
我认为问题是fos_user.user_manager
。为什么?看看这个:
// Unset non editable fields from $request
unset(
$request->get('user')['username'], $request->get('user')['email']
);
// Continue the flow
$form->handleRequest($request);
但令人惊讶的是,这引发了这个“奇怪”的错误:
执行'UPDATE fos_user SET username =时发生异常 ?,username_canonical = ?, email = ?, email_canonical =?,password = ?,roles = ?, updatedAt =? WHERE id =?'用params [null,null, null,null, “tD9GEdMpFT3j75fPeoEkus00ge + xmrgQhaXntNstz7taSx4KAdqpKGhxfC3czHaNr17pGfrigylT29iyTfcZNA ==” “a:1:{i:0; s:16:\”ROLE_PROFILE_TWO \“;}”,“2014-09-13 21:01:10”,4]:
导致这一点:
SQLSTATE [23000]:完整性约束违规:1062重复条目 ''为关键'UNIQ_957A647992FC23A8'
那里有问题吗? username
是唯一的,我不知道为什么,仍然尝试将username
和email
设置为空值,从而导致上述错误。
有什么建议吗?