2015-05-23 5 views
0

Это мой первый проект с Symfony2, и я пытаюсь сохранить объект с 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 имеет идентификатор (автогенерированный), дату создания и изменения (с обратными вызовами жизненного цикла) и связанный идентификатор проекта (отношение много к одному).

Я пытаюсь создать новую версию, просто передающую идентификатор проекта.

Я думаю, что проблема возникла из этой линии

$form->handleRequest($request); 

Он ожидает сериализованный $ запроса не только JSON OBJ.

Если я отключу проверку формы и сохраняю ее, то она будет успешно сохранена, но я не уверен, что это хорошая практика.

Любая помощь или совет, как действовать в этой ситуации?

ответ

0

Хм, если я верно вас понял, вы должны быть в состоянии использовать:

$project_id = $request->request->get('project_id', 'null'); 
$form->submit(['form_name' => ['project_id' => $project_id ]]); 

if ($form->isValid()){ 

} 

Я не уверен, что вы сказали:

Он ожидает $ запроса сериализованного не только JSON obj.

Я знаю, что AngularJS использует JSON для передачи данных на сервер, однако, я не знал, что jQuery делает это, как хорошо. Имеет ли это?

+0

Идентификатор проекта - это поле в форме. Я пробовал свой код, но он также не работает ... На самом деле я считаю, что моя концепция создания и отправки формы неверна (и, возможно, проверка не выполняется из-за скрытых входов, которые symfony2 создает в форме). Я удалил элементы формы и проверку и добавил инструкцию try-catch для проверки успешного сохранения объекта. Я уверен, что это не очень хорошая практика, и любые другие идеи будут высоко оценены. – nevermind