Я создаю простой 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: Любые идеи лучше моих или любые предложения по коду приветствуются !!
1-й тест
Я думал, что проблема заключается в 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 =?, пароль =
?, role = ?, updatedAt =? ГДЕ id =? ‘ с параметрами [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
с пустыми значениями, вызывающими ошибку выше.
Какие-либо предложения?
Задача ещё не решена.
Других решений пока нет …