表单值未保存在模态

时间:2018-02-02 09:08:55

标签: php ajax forms symfony

我是php编码的新手,我正在收回另一位离开的开发者的网站开发。 我正在使用symfony 2。 我的页面是关于特定主题的会议列表。这很好。 我增加了为特殊会议添加专家的可能性。这也很好。 我想要添加的是一个模式,可以在不更改页面的情况下添加主题专家。然后我创建了一个AddExpert页面,如果单独调用它可以正常工作。当我点击按钮时,它正确地注册了数据库中的专家,然后我可以使用它。但是,当单击模态中的按钮时,模态会消失,但不会创建专家。

这是我的代码: 我有按钮用专家列表弹出模态:

<td>
        {{ form_widget(meeting.expert, {'attr':{'class': 'form-control'}}) }}
    </td>
    <td>

        <a class="btn btn-info" data-toggle="modal" href="{{  path("appli_addexpert") }}" data-target="#myModal">Open Modal</a>

    </td>

标签mymodal如下,但它被我的addExpert页面覆盖:

<!-- Modal -->
    <div id="myModal" class="modal fade" role="dialog">
        <div class="modal-dialog">

            <!-- Modal content-->
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                    <h4 class="modal-title">Modal Header</h4>
                </div>
                <div class="modal-body">
                    <p>Some text in the modal.</p>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                </div>
            </div>

        </div>
    </div>

这是我简单的addExpert.html.twig页面,它可以自行运行:

    {% block body %}
    <div class="row">
        <div class="col-md-12">
            <h3>Add a new expert</h3>
            <form method="post">
                {{ form_widget(form_create) }}
                <button id="button-id-modal" type="submit">Add Expert</button>
            </form>
        </div>
    </div>
{% endblock %}

我已经阅读了一些网页,说它可能需要ajax才能工作。不幸的是我还不是专家,所以我需要一些帮助。我试图在包含所有会议的页面中或在addExpert / html.twig页面中的块javascript中添加以下javascript部分,但它也不起作用:

function postForm($form, callback){
            var values = {};
            console.log($form.serializeArray());
            $.each( $form.serializeArray(), function(i, field) {
                values[field.name] = field.value;
            });

            $.ajax({
                type: 'post',
                url: $form.attr('action'),
                data : values,
                success: callback || function (data) {
                    console.log('Saved!')
                }
            });
        }

        window.postForm = postForm;

非常感谢你的帮助!

编辑:

在我的控制器中,我有以下内容:

/**
 * @Route("/expert/add")
 * @Template()
 */
public function addExpertAction(Request $request)
{
    $expert      = new Expert();
    $form_create = $this->createForm(new ExpertType, $expert);
    $form_create->handleRequest($request);

    if ($form_create->isValid()) {

        $em = $this->getDoctrine()->getManager();
        $em->persist($expert);
        $em->flush();
        $this->get("session")->getFlashBag()->add(
            "success",
            "Expert " . $expert->getName() . " successfully added !"
        );

       return $this->redirect($this->generateUrl('bdl_appli_manage_expertlist'));
    }

    return array(
        "form_create" => $form_create->createView(),
    );

}

我猜测应该更改返回但不确定如何关闭模态

1 个答案:

答案 0 :(得分:0)

首先,我不知道你在哪里调用“postForm” 这个函数应该得到一个jquery表单元素和一个回调,这个回调将被调用为ajax调用。 第二件事是“url”ib ajax调用它看起来好像你依赖于应该包含端点url的表单中的“action”属性,但你的表单元素中没有这个属性。