没有填充AJAX下拉列表的Symfony 3.2表单字段

时间:2017-03-14 12:54:54

标签: php ajax forms symfony symfony-forms

帐户邀请表

我想为指定的用户加载帐户

Invitor: [_Select User _______X]
Account: [_Select Account_____X]

试图实施Dynamic Generation for Submitted Forms但没有成功。更改用户下拉菜单和帐户下拉列表仍为空。

Account --------{OneToMany}------- UserAccount --------{ManyToOne}-------- User
Account --------{OneToMany}------- AccountInvitation

AccountInvitationType

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('email', LimitedEmailType::class, array(
            'label' => false,
        ))
        ->add('invitedBy', InvitorType::class);

    $formModifier = function(FormInterface $form, User $user = null) {

        $accounts = null === $user ? array() : $user->getAccounts();

        $form
            ->add('account', EntityType::class, array(
                'label' => false,
                'class' => Account::class,
                'choice_label' => 'title',
                'choice_value' => 'id',
                'choices' => $accounts,
            ));

    };

    $builder->addEventListener(FormEvents::PRE_SET_DATA,
    function(FormEvent $event) use ($formModifier) {

        $formModifier($event->getForm(), $event->getData()->getInvitedBy());

    });

    $builder->get('invitedBy')->addEventListener(FormEvents::POST_SUBMIT,
    function(FormEvent $event) use ($formModifier) {

        $event->stopPropagation();

        $formModifier($event->getForm()->getParent(), $event->getForm()->getData());

    }, 900);

}

AJAX调用没问题,但是响应中的表单中没有$accounts

使用 Xdebug & PhpStorm $accounts包含有效数组,但似乎account字段未填充并添加到表单中。

问题

为什么在更改用户下拉列表后,account表单字段不会填充?

更新1

AJAX电话:

var $invitedBy = $('#accountinvitation_invitedBy');
$invitedBy.change(function() {

    var $form = $(this).closest('form');
    var data = {};

    data[$invitedBy.attr('name')] = $invitedBy.val();
    $.ajax({
        url : $form.attr('action'),
        type: $form.attr('method'),
        data : data,
        success: function(html) {
            var replace = $(html).find('#accountinvitation_account');
            $('#accountinvitation_account').replaceWith(replace);
        },
    });
});

0 个答案:

没有答案