Мне нужно сохранить данные из формы с помощью symfony через ajax, чтобы я не обновил браузер. Кроме того, я нуждаюсь в вас в случае ошибок в полях, может каким-то образом получить их в ответ на этот вызов Ajax и показать мои ошибки формы, без обновления страницы.Проверка формы в symfony от вызова ajax
У меня есть форма с активом symfony, чтобы проверить поля и сделать все идеально, если выполняется ajax-вызов, сохраняет данные или обновляет страницу с ошибками, но мне нужно это же, не обновляя страницу.
Тогда я положил часть кода я использую:
Контроллер:
public function createAction(Request $request)
{
$entity = new Student();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('student_show', array('id' => $entity->getId())));
}
return $this->render('BackendBundle:Student:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
Ajax вызова: (я не понимаю, как обрабатывать часть ошибок)
$('.form_student').submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: Routing.generate('student_create'),
data: $(this).serialize(),
success: function(data) {
//clean form
cleanForm($(this));
//show success message
$('#result').html("<div id='message'></div>");
$('#message').html("<h2> student created</h2>").hide();
$('#message').fadeIn('slow').delay(5000).fadeOut('slow');
event.stopPropagation();
},
error: function (xhr, desc, err)
{
alert("error");
}
})
return false;
});
Я видел, как некоторые возвращают JsonResponse от контроллера и используют Ajax, но я начинаю с Ajax, и я не знаю, как его использовать. Тогда я поставил код, я имею в виду:
if ($request->isXmlHttpRequest()) {
if ($form->isValid()) {
//...
return new JsonResponse(array('message' => 'Success!'), 200);
}
$response = new JsonResponse(array(
'message' => 'Error',
'form' => $this->renderView('BackendBundle:student:new.html.twig',
array(
'entity' => $entity,
'form' => $form->createView(),
))), 400);
return $response;
}
Если вы могли бы помочь мне лучше понять, как использовать Ajax, чтобы решить эту проблему, я бесконечно благодарен, потому что для многих руководств я видел, я до сих пор не понимаю, это хорошо ,
спасибо, что заранее.
Привет @Matteo, спасибо еще раз за код, он работал отлично получает ошибки при вызове Ajax, но у меня есть проблема на моей форме У меня есть другой встроенный код и он не возвращал поля с ошибками, которые вставляли форму. Вы знаете, как я могу добавить его к ключевой дате массива, который возвращается в вызове? Я показываю два поля формы «Estudent», у которых есть другая встроенная форма «Ответственный» (родители) следующим образом: '- > add ('response1', new PadresType(), array ('label' => 'Mother')) -> add ('ответственный2', новый PadresType(), array ('label' => 'Father')) ' – Joseph
Я прочитал некоторую потребность добавить 'cascade_validation = true' для проверки встроенной формы, но не знал, где разместить. Может быть, что мне нужно проверить? – Joseph
Привет @Matteo, вы можете мне помочь? Я не могу решить свою проблему, проверяя встроенную форму. – Joseph