【发布时间】:2015-05-23 17:15:30
【问题描述】:
这是我使用 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。
如果我禁用表单验证并直接保存实体,它将成功保存,但我不确定这是否是一个好习惯。
任何帮助或建议如何在这种情况下进行?
【问题讨论】:
标签: php jquery ajax symfony entity