crud ajax jquery symfony3不会工作

时间:2017-04-03 06:52:55

标签: javascript php jquery ajax symfony

问题:如何在不刷新页面的情况下验证表单并在模式框中返回验证消息。

我刚刚开始学习Symfony 3,但是使用AJAX添加数据时遇到了麻烦。 我知道如何在模式框中包含模板表单,但我不知道如何在模态中显示$ form-> isValid()的错误消息并保留它。

new.html.twig

更新:我现在可以在Controller中调用方法操作。但是当我验证表单时,我还没有在模式框中收到任何验证错误。

<script>
    $(function () {
        $('.withdropdown').dropdown();
        $('.add-company-launch').modal();

        $('#company-form').submit(function(e) {

            var formUrl = "{{ path('monteal_backend_company_ajax') }}";
            var formData = new FormData(this)

            $.ajax({
                url: formUrl,
                type: 'POST',
                data:  formData,
                 contentType: false,
                 cache: false,
                processData: false,
                success: function(data, textStatus, jqXHR)
                {
                    if(data['status'] === 'success'){
                        alert('success');
                    } else {
                        $('#add-company').html(data['html']);
                    }
                },
                error: function(jqXHR, textStatus, errorThrown)
                {
                }
            });

            e.preventDefault();
        });
    })
</script>

{%endblock%}

CompanyController.php

更新:我为AJAX创建了两个方法, 1.处理表格的方法。 2. AjaxHandler。

   public function newAction() {

        $company = new Company();

        $form = $this->createForm(CompanyForm::class, $company);

        return $this->render('Admin/Backend/Company/new.html.twig', array(
            'form'=>$form->createView()
        ));
    }

    public function ajaxAction(Request $request) {

        if (!$request->isXmlHttpRequest()) {
            return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
        }

        $company = new Company();
        $form = $this->createForm(CompanyForm::class, $company);
        $form->handleRequest($request);

        if ($form->isValid()) {

            $em = $this->getDoctrine()->getManager();
            $em->persist($company);
            $em->flush();

            return new JsonResponse(array(
                'status' => 'success'), 200
            );
        }

        $html = $this->renderView("Admin/Backend/Company/new.html.twig", array(
            'form' => $form->createView())
        );

        return new JsonResponse(['status' => 'error', 'html' => $html]);
    }

1 个答案:

答案 0 :(得分:0)

1 - 在你的newAction中,只需创建表单并将视图(createView)传递给你的模板。

2 - 编写一个ajaxFormHandlerAction,在这里创建表单,处理它,验证它,在变量中呈现一个视图: $ html = $ this-&gt; renderView(&#39; yourTemplate.html.twig&#39;,array($ form-&gt; createView())); 编辑:当然你的ajax必须将表单发布到你新的ajax网址... END编辑

3 - 如果已经过验证 返回一个JsonResponse(数组(&#39; html&#39; =&gt; $ html,&#39; status&#39; =&gt;&#39;错误&#39;));     如果有效 返回一个JsonResponse(数组(&#39; status&#39; =&gt;&#39;成功&#39;));

4 - 在你的ajax成功回调中,如果状态错误,则渲染新表单。     如果状态成功,重定向或其他

希望这个帮助

编辑:

对你的控制器来说是这样的:

    use Symfony\Component\HttpFoundation\JsonResponse;
    public function ajaxFormHandlerAction(Request $request) 
    {
        $company = getYourCompany(); //get it from db?
        $form = $this->createForm(CompanyForm::class, $company));
        $form ->handleRequest($request);
        if($form ->isValid()){
             //do whatever you want, maybe persist, flush()
             return new JsonResponse(array(
                'status' => 'success'));
        }
        $html = $this->renderView("yourModalTemplate.html.twig", array('form' => $form->createView()));
        return new JsonResponse(['status' => 'error', 'html' => $html]);
     }

在你的成功中ajax回调:

success: function(data, textStatus, jqXHR)
{
    if(data['status'] === 'success'){
        alert('success');
        // maybe redirect the user ???
    }else if(data['status' === 'error']){
        $('#idOfYourModal').html(data['html']); //assuming you use jquery, or translate to javascript
    }
},

您必须创建一个仅包含模态的树枝模板...