私はsymfonyを使ってフォームからデータを保存する必要があります。これは、ajaxによってブラウザを更新しないように呼びます。また、フィールドのエラーが発生した場合には、Ajaxの呼び出しに応答してフォームを表示し、フォームのエラーを表示することができます。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を使い始めています。使用方法はわかりません。あなたは、私は永遠に感謝し、私はこの問題を解決するための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;
}
:それから私は私が意味するコードを置きます。
ありがとうございます。
こんにちは@Matteoは、コードのために非常にありがとうございました、それは完全にAJAX呼び出しでエラーが発生してきましたが、私は別の埋め込みコードを持っている私のフォーム上の問題を抱えていますフォームに埋め込まれたエラーのあるフィールドは返されませんでした。コールで返された配列のキー日付にどのように追加することができるのか分かりますか?このように 'Responsible'(parents)という組み込み形式の' Estudent'の2つのフィールドを表示します: ' - ( 'ラベル' => '母')) - > add( 'responsible2'、新しいPadresType()、array( 'label' => 'Father')) 'add '(' responsiblee1 '、新しいPadresType()、array – Joseph
私は埋め込みフォームの検証のために 'cascade_validation = true'を追加する必要があることを読んだことがありますが、どこに配置するのかは分かりません。私はそれを検証する必要があるかもしれませんか? – Joseph
こんにちは@Matteo、あなたは私を助けることができますか?私は自分の問題を解決できない埋め込みフォームを検証する – Joseph