我正在尝试使用控制器从ajax请求接收的数据来保存表单。我似乎有一个问题将数据绑定到控制器中的新Symfony表单。当控制器收到带有我的数据的表单时,日志记录显示isValid方法似乎失败了[] []。我怀疑我的控制器有问题,但我是Symfony2的新手,不确定如何让我的数据正确地与表格捆绑。
jQuery Ajax POST
$( document ).on( "submit", function(e){
e.preventDefault();
var $form = $('form.agency');
var $url = $form.attr('action');
var $data = $form.serialize();
var $form_tag = $form.parent().attr('id').split('_');
var $id = $form_tag[2];
$.post($url, //ajax_return_agencies
{uid: $id, data: $data},
function (response) {
if(response.success) {
$('#result').html('SUCCESS');
}else{
alert('failed');
}
});
});
Symfony2控制器
public function updateAction(Request $request)
{
$logger = $this->get('logger');
$id = $request->request->get('uid');
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('ShuttleItGtfsBundle:ShuttleitAgencies')->find($id);
$form = $this->createForm(new AgencyType(), $entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em->persist($entity);
$em->flush();
if($request->isXmlHttpRequest()) {
$response = new Response();
$output = array('success' => true);
$response->headers->set('Content-Type', 'application/json');
$response->setContent(json_encode($output));
return $response;
}
}
$errors = $form->getErrorsAsString();
$errors = explode("\n", $errors);
$response = array("code" => 100, "success" => false, "data_bundle" => $errors);
return new Response(json_encode($response));
}
枝条
<h1>Agency creation</h1>
<span id="{{ type }}_form_{{ id }}">
<form class="{{ type }}" action="{{ path('set_element') }}" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<p>
<button type="submit">Create</button>
</p>
</form>
</span>
<ul class="record_actions">
<li>
<a href="#">
Back to the list
</a>
</li>
</ul>
<div id="result"></div>
答案 0 :(得分:1)
我认为问题在于您在data
元素中传递表单数据。虽然symfony
期望表单数据位于$_POST
数组的“根”中。
如果建议您将id作为url
的一部分传递,但是,如果您想坚持原始解决方案,请尝试以下方法:
var url = $('form.agency').attr('action');
var data = $('form.agency').serialize();
var form_tag = $('form.agency').parent().attr('id').split('_');
var id = form_tag[2];
data.id = id;
$.post(url, data,
function (response) {
if(response.success) {
$('#result').html('SUCCESS');
}else{
alert('failed');
}
});
当我需要使用ajax提交表单时,我通常会使用以下内容:
$.ajax({
type: 'PUT',
url: Routing.generate('frontend_edit_entity', {id:id}),
data: data,
dataType: 'json',
success: function (response) {
/* .. */
}
});
<强> P.S。强>
如果您要以JsonResponse
格式发送回复,建议您使用JSON
。