2015-03-11 2 views
2

Когда я отправляю форму с данными на сервере во второй раз, она перенаправляет меня на маршрут, который обрабатывает запрос от клиента.Symfony2 переадресации при повторной отправке формы

Что я имею в виду

У меня есть метод контроллера, который принимать запрос от клиента, как AJAX и проверки данных

public function addCommentAction(Request $request) 
    { 
     $post = new Post(); 
     $form = $this->createForm(new PostType(), $post); 
     $post->setCreated(new \DateTime('now')); 
     if ($request->getMethod() == 'POST') { 
      $form->submit($request); 
      if ($form->isValid()) { 
       $em = $this->getDoctrine()->getManager(); 
       $em->persist($post); 
       $em->flush(); 
       $this->get('session')->getFlashBag()->add('success', 'Comment has been sent on moderation. Wait 1 minute before send another comment.'); 
      } 
     } 
     return $this->render('GuestbookBundle:Post:postForm.html.twig', array(
      'form' => $form->createView(), 
     )); 
    } 

Мой Аякса. Сериализация формы и после этого послать запрос на сервер с данными из формы

$('.container .form-comment .send-comment').on('click', function(e) { 
     var $from = $(this).closest('form'); 
     e.preventDefault(); 
     $.ajax({ 
      type: "POST", 
      url: $from.attr('action'), 
      data: $from.serialize(), 
      success: function(data) { 
       $('.form-comment').empty().append(data); 
      } 
     }) 
    }); 

Когда я нажимаю кнопку отправить второй раз, когда он перенаправляет меня на странице mydomain.com/add, которые обрабатывают запрос от формы

add: 
    path:  /add 
    defaults: { _controller: GuestbookBundle:Post:addComment } 
    requirements: 
     _method: POST 

Как это исправить? Почему после успеха отправьте мою форму непонятно?

спасибо.

+0

Я думаю, что на слушателе не зарегистрирован во второй раз вокруг – Koalabaerchen

+0

Что вы имеете в виду? Вы можете объяснить. –

+0

@MaximR какой ожидаемый результат после отправки формы? –

ответ

0

Прежде всего, вы возвращаете форму после отправки, зачем вам это нужно? Как я вижу, вы пытаетесь добавить комментарий, поэтому после отправки вы можете вернуть сообщение (например, - успех) или любые другие данные, которые вам нужны.

public function addCommentAction(Request $request) 
    { 
     $post = new Post(); 
     $form = $this->createForm(new PostType(), $post); 
     $result = ['status' => 'success', 
       'comment' => 'Comment has been sent on moderation. Wait 1 minute before send another comment.' ]; 
     $post->setCreated(new \DateTime('now')); 
     if ($request->getMethod() === 'POST') { 
      $form->submit($request); 
      if ($form->isValid()) { 
       $em = $this->getDoctrine()->getManager(); 
       $em->persist($post); 
       $em->flush(); 
//    $this->get('session')->getFlashBag()->add('success', 'Comment has been sent on moderation. Wait 1 minute before send another comment.'); 
       return new JsonResponse($result); 
      } 
      $result['status'] = 'error'; 
      return new JsonResponse($result); 
     } 
     return $this->render('GuestbookBundle:Post:postForm.html.twig', array(
      'form' => $form->createView(), 
     )); 
    } 

JavaScript:

$('.container .form-comment .send-comment').on('click', function(e) { 
     var $from = $(this).closest('form'); 
     e.preventDefault(); 
     $.ajax({ 
      type: "POST", 
      url: $from.attr('action'), 
      data: $from.serialize() 

     }).done(function(data) { 
        //data will contains data.status && data.message 
        //you can add any data in your controller 

      $('.form-comment').empty().append(data.messages); 

     }).fail(function(data) { 
      alert(data.messages); 
     }); 
    }); 

также вы используете устаревший синтаксис, лучше использовать $form->handleRequest($request);, вы можете прочитать об этом here

+0

@MaximR что вы имеете в виду? Проверка symfony в порядке –

+0

Да. Его работа, но как насчет проверки, возможно ли использовать проверку symfony, или я должен сделать это вручную? –

+0

Я имею в виду, как использовать эту проверку {{form_errors (form.domain)}} или что-то в этом роде, и в каждом поле указывается, какую ошибку пользователь должен делать. –

0

я нашел, почему они отправляют меня на URL после повторного Отправить. Во второй раз jquery не работает, потому что после ответа я получаю новый html, а jquery может связывать события с кнопками. В изменении решения JS код

$('.container .form-comment').on('submit', '.send-comment', function(e) { 
}); 
Смежные вопросы