用于ButtonType Symfony的isClicked()

时间:2018-05-02 10:59:59

标签: symfony

我在模态上有一个表单,其中包含2个提交类型的按钮。因此,根据单击的按钮,将访问服务中的相同功能,但具有不同的参数。我想要做的是在点击任何按钮时保持模态打开。

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 :(得分:0)

也许这会有所帮助

//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
    });