在处理表单之前从请求中删除元素

时间:2014-09-18 02:24:19

标签: php symfony fosuserbundle symfony-forms symfony-2.5

我正在创建一个简单的CRUD来管理一个应用程序的用户。用户由FOSUserBundle创建和管理。此外,我不允许任何人编辑/更改usernameemail,因此我不会在正在编辑的表单中显示这些字段。这是我正在处理编辑的代码:

// 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);
}

但由于usernameemail字段不存在,并且它们以某种方式进入更新操作,其中这些字段使用空值更新。我能想到解决这个问题的唯一方法是在发出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是唯一的,我不知道为什么,仍然尝试将usernameemail设置为空值,从而导致上述错误。

有什么建议吗?

0 个答案:

没有答案