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;
}