Symfony 3 无线电输入名称更改
Symfony 3 radio input name change
我有一个表单,其中包含实体 (CustomerVats) 的表单 (CustomerVatsType)。该实体有一列 (vats),其中包含多个增值税行。这些行以 json 格式保存。在此表格上,客户可以选择一个默认增值税,该增值税将保存在单位列中保存的行的“默认”索引中。
但问题是由于表单结构,单选输入名称是“form[vats][0][set_default]”。但要使无线电输入正常工作,所有输入都必须相同(例如 form[vats][set_default])。我可以在 twig 文件中更改名称,但是 class 无法理解这一点。
对于这种情况可以做些什么。甚至 Symfony 是否支持它。这是我的表格 class.
class VatsType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('vats', CollectionType::class, array(
'entry_type' => VatType::class,
'allow_add' => false,
'allow_delete' => false,
'prototype' => false,
'by_reference' => false,
)
)
->add('vatSumbit', SubmitType::class);
}
}
class VatType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('country_id', HiddenType::class, array('label' => false))
->add('vat_high', HiddenType::class, array('label' => false))
->add('vat_low', HiddenType::class, array('label' => false))
->add('vat_zero', HiddenType::class, array('label' => false))
->add('vat_none', HiddenType::class, array('label' => false))
->add('set_default', RadioType::class, array('label' => false))
->add('set_show', RadioType::class, array('label' => false));
}
}
我最终使用以下修复程序解决了这个问题。它看起来有点脏,但最有意义,因为我不想用一些非常困难的方法混淆其他开发者。
<script type="text/javascript">
(function (document, window, $) {
$('[data-radio-field]').change(function () {
var field = $(this).data('radio-field');
$('[data-radio-field="' + field + '"]').not($(this)).prop('checked', false);
});
})(document, window, jQuery);
</script>
如果谁能提出一个干净的方法,欢迎回答。我认为这应该是一个普遍的问题。想看看其他的方法。
我有一个表单,其中包含实体 (CustomerVats) 的表单 (CustomerVatsType)。该实体有一列 (vats),其中包含多个增值税行。这些行以 json 格式保存。在此表格上,客户可以选择一个默认增值税,该增值税将保存在单位列中保存的行的“默认”索引中。
但问题是由于表单结构,单选输入名称是“form[vats][0][set_default]”。但要使无线电输入正常工作,所有输入都必须相同(例如 form[vats][set_default])。我可以在 twig 文件中更改名称,但是 class 无法理解这一点。
对于这种情况可以做些什么。甚至 Symfony 是否支持它。这是我的表格 class.
class VatsType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('vats', CollectionType::class, array(
'entry_type' => VatType::class,
'allow_add' => false,
'allow_delete' => false,
'prototype' => false,
'by_reference' => false,
)
)
->add('vatSumbit', SubmitType::class);
}
}
class VatType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('country_id', HiddenType::class, array('label' => false))
->add('vat_high', HiddenType::class, array('label' => false))
->add('vat_low', HiddenType::class, array('label' => false))
->add('vat_zero', HiddenType::class, array('label' => false))
->add('vat_none', HiddenType::class, array('label' => false))
->add('set_default', RadioType::class, array('label' => false))
->add('set_show', RadioType::class, array('label' => false));
}
}
我最终使用以下修复程序解决了这个问题。它看起来有点脏,但最有意义,因为我不想用一些非常困难的方法混淆其他开发者。
<script type="text/javascript">
(function (document, window, $) {
$('[data-radio-field]').change(function () {
var field = $(this).data('radio-field');
$('[data-radio-field="' + field + '"]').not($(this)).prop('checked', false);
});
})(document, window, jQuery);
</script>
如果谁能提出一个干净的方法,欢迎回答。我认为这应该是一个普遍的问题。想看看其他的方法。