Symfony 4-使用Axios提交表单?

时间:2020-01-30 10:59:08

标签: ajax symfony axios

使用Axios,我得到了一个用Symfony FormBuilder创建的表单,然后将其显示为模式:

template.html.twig:

productId = {{product.id}};
            var url = Routing.generate("stripe_admin_product_update_form", {id: productId});
            axios.get(url)
                .then(function(response){
                    var form = response.data.form;
                    Swal.fire({
                        title: "Modifier ?",
                        html: form,
                        icon: "question",
                        showCancelButton: true,
                        allowOutsideClick: () => !Swal.isLoading(),
                        preConfirm: function(result)
                        {
                            //submit form
                        }
                    });
                });

controller.php

 /**
     * @Route("/admin/stripe/product/{id}/update/form", name="stripe_admin_product_update_form", options={"expose"=true})
     *
     */
    public function getUpdateProductForm(StripeProduct $product)
    {
        $form = $this->createFormBuilder($product)
                    ->add("name")
                    ->add("unitLabel")
                    ->add("bankStatementLabel")
                    ->getForm();

        // if($form->isSubmitted() && $form->isValid())
        // {
        //     Traitment
        // }

        $response = [
            "code" => 200,
            "form" => $this->render("stripe_admin/product/_form_edit.html.twig", [
                "form" => $form->createView(),
            ])->getContent()
        ];

        return new JsonResponse($response);
    }

它给了我类似的东西

enter image description here

现在如何使用Axios验证表单? 因此,目标是返回到函数,并且该行:

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

被检测到,以便我可以处理任何错误并进行其余处理

1 个答案:

答案 0 :(得分:0)

您必须像处理经典表单提交一样处理请求(理解不是通过AJAX提交)

/**
 * @Route("/admin/stripe/product/{id}/update/form", name="stripe_admin_product_update_form", options={"expose"=true})
 *
 */
public function getUpdateProductForm(Request $request, StripeProduct $product)
{
    $form = $this->createFormBuilder($product)
                ->add("name")
                ->add("unitLabel")
                ->add("bankStatementLabel")
                ->getForm();


    $form->handleRequest($request);
     if($form->isSubmitted() && $form->isValid())
     {
         //Traitment
     }

    $response = [
        "code" => 200,
        "form" => $this->render("stripe_admin/product/_form_edit.html.twig", [
            "form" => $form->createView(),
        ])->getContent()
    ];

    return new JsonResponse($response);
}