2015-11-13 2 views
0

Я пытаюсь создать объект через Symfony2 и Ajax. Когда я пытаюсь ввести существующее имя, я хочу получить ошибку в текстовом поле «Имя». После ввода другого правильно имя, я хочу, чтобы сообщение об ошибке было удалено и отправлено с успешно. Мой код не отправляет правильные данные, но продолжает добавлять дополнительные сообщения об ошибках.Symfony2 + Ajax: удалить форму error

Контроллер

public function createSubmitAction(Request $request){ 
    $collection = new Collection(); 
    $user = $this->getUser(); 
    $form = $this->createForm(
     new CollectionType(), 
     $collection 
    ); 


    $form->handleRequest($request); 

    $colname = $form["name"]->getData(); 
    $existing = $this->getDoctrine()->getRepository('CollectionBundle:Collection')->findBy(['name' => $colname, 'user' => $user]); 
    if ($existing != NULL) { 
     return new JsonResponse(['error' => 'already exists']); 
    } 

    if ($form->isValid() && $form->isSubmitted()) { 

     $em = $this->getDoctrine()->getManager(); 
     $collection->setUser($user); 
     $em->persist($collection); 
     $em->flush(); 

     return new JsonResponse([ 
      'id' => $collection->getId(), 
      'name' => $collection->getName() 
     ]); 
    } 
} 

Javascript

function createInObjectCollection(){ 
    var $form = $('#create-in-object-form'); 
    $($form).submit(function(e) { 
     e.preventDefault(); 
     $.ajax({ 
      type: "POST", 
      url: $form.attr('action'), 
      data: $form.serialize() 
     }).done(function(data) { 
      if (data.error){ 
       $('<label class="form-error">Collection with such name already exists</label>').insertAfter('#mymini_collectionbundle_collection_name'); 
       $('#mymini_collectionbundle_collection_name').addClass('error'); 
      } 
      else{ 
       $("#collection_bundle_add_to_collection option:first-child").after('<option value='+ data.id + '>' + data.name + '</option>'); 
       $('#createCollectionModal').foundation('reveal', 'close'); 
      } 

     }); 
    }); 
} 

ответ

2

У меня похожая ситуация. И я использую EventListener:

$builder->addEventListener(
     FormEvents::PRE_SET_DATA, 
     function (FormEvent $event) { 
      $form = $event->getForm(); 
      $data = $event->getData(); 

      \\... 


     } 
    ); 

И вы можете использовать событие, как «ВВЕСТИ» и «PRE_SUBMIT».