Я хочу обновить данные, и мне нужно использовать конструктор форм для создания форм. Я видел похожие вопросы, но у меня это не работает.
Мой конструктор форм. Я думаю, что все в порядке.
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);
}
Когда я пытаюсь сбросить имя пользователя, я получил ""
или ноль с сервера.
Попробуйте это для вашего контроллера:
/**
* @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 ...
}
Других решений пока нет …