Symfony - 控制器编辑操作

Symfony  - 控制器编辑操作

问题描述:

I defined the form in my controller and set function to edit/update specific fields that I can find by ID. I can't find what am I doing wrong..

 public function getUserEdit(Request $request)
{
    $form = $this->createFormBuilder()
        ->add('firstName', TextType::class, array('label' => 'First Name*', 'attr' => ['class'=>'form-control']))
        ->add('save', SubmitType::class, array('label' => 'Send', 'attr' => [
            'class' => 'btn btn-primary action-save'
        ]))
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        $data = $form->getData();
        $firstName = $data['firstName'];

        $this->container->get('user')->editUser($firstName);
    }

    return $this->success();
}

Service

public function editUser($id)
{
    $editUsers = $this->getUserRepository()->find($id);

    if(empty($editUsers)) {
        $editUsers = new User();
        $editUsers->setId($id);
        $this->em->persist($editUsers);
        $this->em->flush();
    }
}

Symfony returns a single object when searching by find primary key (usually id), then you can check if exist returns a single Entity (in this case User) and so that checking by using insteance.

public function editUser($id)
{
    $editUsers = $this->getUserRepository()->find($id);

    if($editUsers insteance User) { // here just check 
        //$editUsers = new User(); // here You don't need create new object of class User, just remove
        $editUsers->setId($id);
        $this->em->persist($editUsers);
        $this->em->flush();
    }
    else {
        // do something if you need
    }
}