Как получить значения форм в контроллере Symfony 4 с помощью компоновщика форм

Я хочу обновить данные, и мне нужно использовать конструктор форм для создания форм. Я видел похожие вопросы, но у меня это не работает.

Мой конструктор форм. Я думаю, что все в порядке.

class GeneralInfoType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username', TextType::class, ['label' => false])
->add('email', EmailType::class, ['label' => false])
;
}

public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([

]);
}
}

Моя форма на ветке. Я отправляю идентификатор текущего пользователя в форму.

 {{ form_start(form, {'action': path('updateInfo',{'id':users.id}), 'method': 'GET'}) }}
{{ form_row(form.username, {'value' : users.username, 'attr': {'class': 'form-control'} }) }}
{{ form_row(form.email, {'value' : users.email, 'attr': {'class': 'form-control'} } )  }}
<button type="submit" class="btn btn-primary">Update</button>
{{ form_end(form) }}

Мой контроллер

/**
* @Route("user/profile/{id}", name="updateInfo")
* @param $id
* @param Request $request
* @return Response
*/
public function updatePersonalInfoAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('App:User')->find($id);
$form = $this->createForm(GeneralInfoType::class, $user);
$username = $form->get('username')->getData();
dump($username);
}

Когда я пытаюсь сбросить имя пользователя, я получил "" или ноль с сервера.

1

Решение

Попробуйте это для вашего контроллера:

/**
* @Route("user/profile/{id}", name="updateInfo")
* @param $id
* @param Request $request
* @return Response
*/
public function updatePersonalInfoAction($id, Request $request)
{
$user = $em->getRepository('App:User')->find($id);
$form = $this->createForm(GeneralInfoType::class, $user);

$form->handleRequest($request);

if ($form->isSubmitted()) {
$username = $form->get('username')->getData();
dump($username);

// you can save the update user info with this:
$user = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();

}

return $this->render('insert_twig_file_path/name', [
'form' => $form->createView()
]);
}

Вы также можете воспользоваться некоторыми автоматическими функциями Symfony, чтобы немного упростить:

/**
* @Route("user/profile/{id}", name="updateInfo")
* @param Request $request
* @param User $user
* @return Response
*/
public function updatePersonalInfoAction(Request $request, User $user)
{
$form = $this->createForm(GeneralInfoType::class, $user);

... the rest unchanged ...

}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector