Php Symfony窗体事件,更改单选按钮上的值

Php Symfony窗体事件,更改单选按钮上的值,php,symfony,Php,Symfony,我有用于OutboundInvoice实体的表单,在表单中我有customer选择字段,使用query\u builder选择客户时,我需要更改字段Invoicing Type中的单选按钮中选择数据。你能怎么做 现在,我使用symfony form event更改字段发票地址的标签'mapped'=>false,处于表单状态,工作正常,单选按钮的相同决定不起作用 地址变了,单选按钮还是没有,为什么 class OutboundInvoiceForm extends AbstractType

我有用于
OutboundInvoice
实体的表单,在表单中我有
customer
选择字段,使用
query\u builder
选择客户时,我需要更改字段
Invoicing Type
中的单选按钮中选择数据。你能怎么做

现在,我使用symfony form event更改字段
发票地址的标签
'mapped'=>false,
处于表单状态,工作正常,单选按钮的相同决定不起作用

地址变了,单选按钮还是没有,为什么

class OutboundInvoiceForm extends AbstractType
{
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('customer', 'entity', array(
            'class' => Customer::class,
            'property' => 'name',
            'empty_value' => 'Choice Customer',
            'query_builder' => function ($repository) {
                /** @var CustomerRepository $repository */
                return $repository->getAllQuery();
            },
            'required' => true
        ));

        $formModifier = function (FormInterface $form, Customer $customer = null) {
        if (null === $customer) {
            $positions = '-';
            $label = $positions;
            $invoicingType = null;
        } else {
            $positions = $customer->getInvoicingAddress()
                ? $customer->getInvoicingAddress()->getFormattedAddress()
                : '-';
            $label = $positions;
            $invoicingType = $customer->getInvoicingType()
                ? $customer->getInvoicingType()
                : null;
        }

        $form
            ->add('invoicingType', 'entity', array(
                'class' => InvoicingType::class,
                'property' => 'name',
                'data' => $invoicingType,
                'query_builder' => function ($repository) {
                    /** @var InvoicingTypeRepository  $repository */
                    return $repository->getAllQuery();
                },
                'required' => false,
                'expanded' => true,
            ))
            ->add('invoicing_address', TextType::class, [
                'mapped' => false,
                'empty_data' => $positions,
                'label' => $label
            ]);

    };

    $builder->addEventListener(
        FormEvents::PRE_SET_DATA,
        function (FormEvent $event) use ($formModifier) {
            $data = $event->getData();
            $formModifier($event->getForm(), $data->getCustomer());
        }
    );

    $builder->get('customer')->addEventListener(
        FormEvents::POST_SUBMIT,
        function (FormEvent $event) use ($formModifier) {
            $customer = $event->getForm()->getData();
            $formModifier($event->getForm()->getParent(), $customer);
        }
    );
    $builder
        ->add('message')
        ->add('notes');
}

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => OutboundInvoice::class,
        'csrf_protection' => false,
        'edit' => false,
        'terms_edit_data' => 0
    ));
}

/**
 * @return string
 */
public function getName()
{
    return 'economy_bundle_outbound_invoice';
}
在js中替换的模板和块

        <div id="invoicing-address-container" class="form-group">
        invoicing_address <br>
        <label for="customer-address-id">
            {{ form_label(form.invoicing_address)}}
        </label>
        <div id="customer-address-container" style="display: none;">
            {{ form_widget(form.invoicing_address) }}
        </div>
        <br>
        <label for="reversed-vat">
            {{ form_label(form.invoicingType, 'invoicing_type*')}}
        </label>
        {{ form_widget(form.invoicingType) }}
    </div>

尝试选择with name,并希望它能工作(但您有一个很长的表单名称:):

然后您可以
切换
,或者如果elseif elseif elseif
您的条件,只需

您可以尝试从Chrome控制台和调用触发器的选择输入,看看发生了什么

var $customer = $('#economy_bundle_outbound_invoice_customer');

$customer.change(function() {   
var $form = $(this).closest('form');
var data = {};
data[$sport.attr('name')] = $sport.val();
$.ajax({
    url : $form.attr('action'),
    type: $form.attr('method'),
    data : data,
    success: function(html) {
        $('#invoicing-address-container').replaceWith(
            $(html).find('#invoicing-address-container')
        );
    }
});
});
$('input[type=radio][name="economy_bundle_outbound_invoice[invoicing_address]"]').change(function() {
    // var selectedValue = this.value;
}