[英]Validating symfony2 form with ajax
這是我與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);
});
});
Version實體本身具有ID(自動生成),創建和修改日期(帶有生命周期回調)和關聯的項目ID(多對1關系)。
我正在嘗試創建一個僅通過項目ID的新版本。
我認為問題出在這條線
$form->handleRequest($request);
它期望一個序列化的$ request不僅僅是一個JSON obj。
如果我禁用了表單驗證並直接控制實體,那么它將成功保存,但是我不確定這是否是一個好習慣。
任何幫助或建議在這種情況下如何進行?
嗯,如果我沒聽錯,您應該可以使用:
$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
也jQuery
。 可以?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.