поле сущности symfony2 отправляет нулевой POST-запрос

#php #symfony

#php #symfony

Вопрос:

Я создаю форму в своем контроллере :

 public function uploadAction(Request $request)
    {

        $user= new User();
        $form = $this->createFormBuilder($user)
            ->setAction($this->generateUrl('app_create_user'))
            ->add('name','text',array('label'=>'Your Name','required' => false))
            ->add('idcountry', 'entity', array(
                'mapped'   => false, 
                'class'    => 'GedBundle:Country',
                'property' => 'country_name',
                'label'     => 'Your Country',
            ))

            ->add('file')
            ->getForm()
        ;

        if ($request->isMethod('POST')) {
            $form->bind($request);
            if ($form->isValid()) {
                $em = $this->getDoctrine()->getManager();
                $em->persist($user);
                $em->flush();

                 return $this->redirect($this->generateUrl('app_homepage'));

            }
        }

        return $this->render('GedBundle:Default:form.html.twig',array(
            'form' => $form->createView(),
        ));

    }
  

И вот мое мнение :

 <form action=" {{ path('app_create_user') }} " method="post" {{ form_enctype(form) }}>
 {{ form_widget(form) }}
 <input type="submit" value="Create" />
</form>
  

все работает хорошо, но единственная проблема заключается в том, что когда я отправляю форму, значение idcountry отправляется как null, и я получаю эту ошибку «Поле ‘idcountry’ не может быть пустым». В чем проблема?

Комментарии:

1. Просто проверьте свою сущность один раз. Если это обязательное свойство, добавьте атрибут ‘nullable’ к этому свойству.

2. Ошибка в форме или она выдается как исключение при попытке сохранения? Также вы создаете $user , но затем сохраняетесь $document (возможно, тип, я знаю).

3. Я выбираю выбор в выпадающем списке, прикладываю форму, отправляя значение страны как null

4. @Qoop Нет, я сохраняю $user, отредактируйте мой вопрос

5. Можете ли вы опубликовать данные запроса с помощью a print_r($request->request); ?

Ответ №1:

Удалите mapped = false настройки конфигурации из idcountry , потому что это означает, что свойство будет доступно из $form->getData() как отдельный элемент массива, а не часть вашей пользовательской сущности.

Кстати, какую версию symfony вы используете? Потому что более 2.3 рекомендуется использовать следующим образом:

 $form->handleRequest($request);
if ($form->isValid()) {
    //YOUR CODE
}
  

и не использовать bindRequest и проверку метода.

Комментарии:

1. Я сделал то, что вы сказали, но я получаю ошибку, исправляемую с ошибкой: объект класса Counrty не может быть преобразован в строку, поэтому я добавляю функцию __toString в класс Country, но я получаю эту ошибку Метод __toString() не должен выдавать исключение :/

2. Можете ли вы добавить также свой объект country? И что это говорит, где оно выдает исключение с __toString ?