我有一个名为" myAction"这将呈现我的项目的主页。此视图(页面)是一个2列布局,左侧有一个包含数据库中所有项目的表。
在右侧,我会渲染项目简历或新项目表格,视情况而定。
当用户点击" New Project"按钮,表单通过load()
jQuery函数呈现。因此,当表单验证时,项目将被保存,您的简历将在布局的右侧呈现(删除表单),但是当表单无效时,我希望呈现带有错误的表单。
所有表单请求都发送到newAction()
方法控制器。
AJAX请求是:
$.ajax({
url: $form.attr('action'),
type: $form.attr('method'),
dataType: 'json',
data: $form.serialize(),
success: function(response){
var object = JSON.parse(response);
if(object.success){
$("#ProjectList").load(Routing.generate('project_my'));
fn_render_resumen(object.message);
}else{
// The form is invalid.
}
}
});
ProjectController中的newAction是:
public function newAction(Request $request){
$project = new Project();
$form = $this->createForm(new ProjectType(), $project);
if($request->isMethod('POST')){
$form->bind($request);
$response = array();
if($form->isValid()){
// Persist in the database...
$response['success'] = true;
$response['message'] = $project->getSlug();
}else{
// Here need send the form with errors to the view.
}
return new JsonResponse(json_encode($response));
}
return $this->render('aView.html.twig',Array('form' => $form->createView()));
}
那么,有什么想法吗?谢谢!
答案 0 :(得分:0)
首先,您不需要将json_encode
数据传递给JsonResponse
;就这样做:
return new JsonResponse($response);
试试这个:
if($form->isValid()){
// Persist in the database...
$response['success'] = true;
$response['message'] = $project->getSlug();
}else{
$formHtml = $this->container
->get('templating')
->render('aViewForm.html.twig',Array('form' => $form->createView()));
$response['success'] = false;
$response['form'] = $formHtml;
}
return new JsonResponse($response);
其中aViewForm.html.twig
是仅呈现表单的模板。例如,它可能如下所示:
{{ form }}
您将拥有完整的HTML代码(有错误)。像这样:
{"success":false,"form":"\u003Cform\u003E...\u003C\/form\u003E"}
然后你可以用JS脚本处理它。