isClicked () для ButtonType Symfony - PullRequest
0 голосов
/ 02 мая 2018

У меня есть форма на модале с 2 кнопками типа submit. Таким образом, в зависимости от того, какая кнопка нажата, будет доступна одна и та же функция в сервисе, но с разными параметрами. Что я хочу сделать, так это держать модал открытым при нажатии на любую из кнопок.

public function createFormExport(Request $request) {
    $form = $this->createFormBuilder()
        //...
        ->add('btn1', SubmitType::class, array(
            'label' => 'Button 1'
        ))
        ->add('btn2', SubmitType::class, array(
            'label' => 'Button 2'
        ))
        ->getForm();

    $form->handleRequest($request);

    if ($form->get('btn1')->isClicked()) {
        $this
            ->getService()
            ->function($form->getData(), "bt1");
    } elseif ($form->get('btn2')->isClicked()) {
        $this
            ->getService()
            ->function($form->getData(), "btn2");
    }

    return $form->createView();

}

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

Если для кнопок я использую ButtonType вместо SubmitType, функция isClicked(), к сожалению, не распознается.

Есть ли способ проверить, какая кнопка нажата, если я использую ButtonType, потому что, если я использую SubmitType, мне нужно будет обнаружить нажатие кнопки в JS, чтобы предотвратить перезагрузку страницы, а затем сгенерировать маршрут в AJAX и прочитайте данные в форме и отправьте их обратно в мой контроллер. Это действительно усложняет вещи.

1 Ответ

0 голосов
/ 02 мая 2018

Может быть, это поможет

//Controller
//return of your method called by the route
(...)
return new JsonResponse(['someData' => '123456789']);

JQuery:

   $("#btn1, #btn2").click(function () {
        var url = "";
        var formSerialize = $("#formAjax").serialize();
        // #formAjax is the id of your <form>
        $.post(url, formSerialize, function(response) {
                $('.anyClass').html(response.someData);
       }, 'JSON')
        .fail(function(xhr, status, error) {
               //do something
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...