2016-07-05 3 views
0

У меня очень простая форма, созданная с помощью createFormBuilder, предоставляющая только одно простое текстовое поле (к форме не добавляется сущность).Symfony Form reset после отправки

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

Существует несколько дополнительных действий с помощью простых ajax-запросов, которые в основном инициируют некоторые элементы пользовательского интерфейса - не касаясь самой формы и не перезагружая страницу.

Все работает отлично, за исключением того, что форма, по-видимому, просто не хочет сбрасываться - это означает: всякий раз, когда нажата кнопка перезагрузки страницы в браузере, появляется стандартное диалоговое окно браузера, в котором спрашивается, хотите ли вы снова отправить форму. И когда вы делаете последнее значение, введенное до того, как будет отправлен последний запрос рендеринга.

Шаблон kw.html.twig - прямолинейный - в основном некоторые элементы пользовательского интерфейса отображают форму и бит jquery для обработки ajax. Ничего особенного.

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

/** 
* @Route("/kw", name="show_kw") 
*/ 
public function showKwAction(Request $request) 
{ 
    if($request->isXmlHttpRequest()) { 
     if($request->getMethod() == 'POST') { 

      // do some logic... 

      return $this->json(array('kw_success' => true)); 
     } 
    } 

    $kwData = array(); 
    $kwForm = $this->createFormBuilder($kwData) 
     ->add('kd', TextType::class) 
     ->getForm(); 
    if($request->isMethod('POST')) { 
     $kwForm->handleRequest($request); 
     $formData = $kwForm->getData(); 

     // do some logic with formData... 

     unset($kwData); 
     unset($kwForm); 
     $kwData = array(); 
     $kwForm = $this->createFormBuilder($kwData) 
      ->add('kd', TextType::class) 
      ->getForm(); 
    } 

    $templateData = array(
     'kwForm' => $kwForm->createView() 
    ); 
    return $this->render(':backend:kw.html.twig', $templateData); 
} 

Любая помощь очень ценится.

EDIT: Использование Symfony 3.1

+0

Это не является проблемой на стороне сервера. Ваш браузер повторяет последний запрос при нажатии на обновление. Попробуйте нажать enter в адресной строке, чтобы обновить его с помощью запроса GET, это работает. – Alsatian

ответ

0

Это именно то, что сказал Alsatian в комментарии. Браузер пытается повторить последний запрос.

Однако я считаю, что вместо уничтожения этой формы вы можете просто перенаправить на тот же маршрут с помощью $ this-> redirectToRoute после обработки данных, конечно, если это не проблема.

Также я вижу, что вы проверяете хотя бы два раза, если метод отправлен. Если это не противоречит остальной логике вашего приложения, вы можете указать @Method("POST") в аннотации, поэтому вам больше не нужно проверять его в коде.

С наилучшими пожеланиями, Р.

Смежные вопросы