模态表单未将新用户数据写入数据库

Form in modal is not writing new user data to Database

我正在尝试在模式中注册新用户,但我无法成功。

home/index.html.twig 中,我通过 AJAX:

显示模态
<div class="cell large-3 t-white bg-dark offset-2 pt-2">    
    <a onclick="createNew()"><img class="" src="{{ asset('images/add_button.svg') }}"></a>    //triggering ajax function
</div>

<div id="addUser" class="modal t-white">   //div for modal

function createNew() {
    $.ajax({
        url: "new",
        type: "POST",
        dataType: 'html',
        data: {},
        success: function (data) {
            $('#addUser').html(data);
        },
        error: function (error) {
            console.log(error);
        }
    });
    $('#addUser').css({display: 'block'});
}

UserController.php

/**
 * Creates a new User entity.
 *
 * @Route("/new", name="new")
 * @Method({"GET", "POST"})
 * @Template()
 */

public function new(Request $request, UserPasswordEncoderInterface $encoder)
{
    $user = new User();
    $form = $this->createForm(UserType::class, $user);
    $form->handleRequest($request);

    $em = $this->getDoctrine()->getManager();

    if ($form->isSubmitted() && $form->isValid()) {
        $user->setPassword($encoder->encodePassword($user, $user->getPassword()));

        $user->setRoles(["ROLE_USER"]);
        $em->persist($user);
        $em->flush();

        return $this->redirectToRoute('home', array('id' => $user->getId()));
    }
    return $this->render('user/new.html.twig',
        array('user' => $user,
              'form' => $form->createView(),));
}

UserType.php

class UserType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('username')
            ->add('password');
    }
}

user/new/html.twig

<div class="modal t-white" id="addUser" style="display: block">
    <div class="box-container center-vertically t-white" id="addWindow">
        <form method="post">
            <div class="box-form">
                {{ form_start(form) }}

                {{ form_errors(form.username) }}
                {{ form_widget(form.username) }}

                {{ form_errors(form.password) }}
                {{ form_widget(form.password) }}

                <input class="button btn-custom-1" type="submit" value="Create"/>
                {{ form_end(form) }}
            </div>
        </form>
    </div>
</div>

<script type="text/javascript">
    $("#addWindow").click(function (event) {
        event.stopPropagation();
    });
</script>

如果我尝试通过模态创建新用户,而不是在 /home 路径中,而是在 /new 路径中(没有模态),一切正常,新用户记录在数据库中。

如有任何帮助,我将不胜感激。 谢谢。

要调用模式,您必须在 home/index.html.twig 上替换此代码:

<a onclick="createNew()"><img class="" src="{{ asset('images/add_button.svg') }}"></a>

通过这个:

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addUser">
  <img class="" src="{{ asset('images/add_button.svg') }}">
</button>

您必须在提交表单时执行 AJAX 调用,例如:

$('#form').submit(function(e) {
    e.preventDefault();
    var url = "{{ path('new') }}";
    var serialized = $(this).serialize(); // Set ``data:{}``:
    $.post(url, serialized, function(response) {
        //your callback here
        console.log(response);
    }, 'JSON');
});

此致,

我找到了解决我的问题的非常简单的方法。 只需在 user/new.html.twig 中更改此行:

<form method="post">

对此:

<form method="post" action="{{ path('new') }}" >