Symfony 3: добавить поле в уже отправленную форму

посмотрев на другие темы, я не решил свою проблему, я хочу добавить поле 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()));
    }

Вместо использования FormBuilder, почему бы вам не выполнить $entity->setUser($user) в контроллере перед промывкой, где $user - это пользовательский объект, который вы получаете после отправки?

Preciel 12.12.2018 23:16
JS - События опций формы
JS - События опций формы
В продолжение предыдущей статьи CSS - стили, связанные с вводом формы , в этой статье мы будем использовать JS для взаимодействия с формами, на этот...
CSS - Стили, связанные с вводом формы
CSS - Стили, связанные с вводом формы
Общими стилями ввода для форм являются Input (включая Text, Radio, checkbox), Select и Textarea, из которых Input относительно прост, поэтому в этой...
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Наличие на корпоративном сайте форм заявлений о приеме на работу, или "трудовых анкет", экономит время и деньги как для соискателей, так и для...
1
1
48
1

Ответы 1

Уверены, что это хороший подход? Может быть, вам лучше написать метод для обновления или создания $ 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 формы, которую вы используете.

NicolaPez 13.12.2018 19:06

но я уверен, что вам не нужен этот слушатель событий

NicolaPez 13.12.2018 19:06

Я обновил свой ответ правильным кодом, это сработает.

NicolaPez 14.12.2018 00:21

Другие вопросы по теме