#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 ?