这是我与Symfony2的第一个项目,我试图用ajax持久化实体。以下是一些示例代码:
路由
...
version_ajax_create:
path: /ajax-create
defaults: { _controller: "CustomNameBundle:Version:ajax" }
methods: POST
...
控制器
public function ajaxAction()
{
$request = $this->get('request');
$em = $this->getDoctrine()->getManager();
$entity = new Version();
// Get data from ajax
$project_id = $request->request->get('project_id', 'null');
// Get project and pass it to the entity
$project = $em->getRepository('CustomNameBundle:Project')->find(array(
'id' => $project_id
));
$entity->setProject($project);
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
$response = array('success' => true);
} else {
$response = array('success' => false);
}
return new JsonResponse($response);
}
查看
$('#add_new_version').on('click', function(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '{{ path('version_ajax_create') }}',
dataType: 'json',
data: { 'project_id': '{{ entity.id }}' }
})
.done(function(data) {
alert('success!')
console.log(data);
})
.fail(function(data) {
alert('fail!')
console.log(data);
});
});
版本实体本身具有id(自动生成),创建和修改日期(带有生命周期回调)和关联项目ID(多对1关系)。
我试图创建一个刚刚传递项目ID的新版本。
我认为问题来自这一行
$form->handleRequest($request);
它希望序列化的$ request不仅仅是一个JSON obj。
如果我禁用表单验证并持续指示实体,它将成功保存,但我不确定这是否是一个好的做法。
在这种情况下如何处理任何帮助或建议?
答案 0 :(得分:0)
$project_id = $request->request->get('project_id', 'null');
$form->submit(['form_name' => ['project_id' => $project_id ]]);
if ( $form->isValid() ){
}
我不确定你说了什么:
它希望序列化的$ request不仅仅是一个JSON obj。
我知道AngularJS
使用JSON
将数据传输到服务器,但是,我不知道jQuery
也会这样做。是吗?