посмотрев на другие темы, я не решил свою проблему, я хочу добавить поле user_id в форму (поскольку пользователь не выберет его), но symfony вернет мне «Вызов функции-члена addEventListener () в строке "
вот мой код:
if ($form->isSubmitted() && $form->isValid()) {
$builder->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
$data = $event->getData();
$form = $event->getForm();
$data['user_id'] = '2';
$event->setData($data);
});
$em = $this->getDoctrine()->getManager();
$em->persist($deplacement);
$em->flush($deplacement);
return $this->redirectToRoute('deplacement_show', array('id' => $deplacement->getId()));
}




Уверены, что это хороший подход? Может быть, вам лучше написать метод для обновления или создания $ deplacement и передать 2 аргумента: переменную $ data из формы и user_id, например:
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$userId = 2;
$formData->userId = $userId;
$deplacement->update($formData);
$em->persist($deplacement);
$em->flush($deplacement);
return $this->redirectToRoute('deplacement_show', array('id' => $deplacement->getId()));
}
Также я думаю, что вам не нужен прослушиватель событий. Почему ты этим пользуешься?
Я не думаю, что вам нужно использовать этот прослушиватель событий, но если вы хотите, вы должны поместить этот код в FormType. возможно, вы где-то нашли этот код и скопировали его в контроллер, но переменная $ builder обычно используется в этом объекте, formType формы, которую вы используете.
но я уверен, что вам не нужен этот слушатель событий
Я обновил свой ответ правильным кодом, это сработает.
Вместо использования FormBuilder, почему бы вам не выполнить
$entity->setUser($user)в контроллере перед промывкой, где$user- это пользовательский объект, который вы получаете после отправки?