2016-12-26 8 views
2

エンティティ(CustomerVats)のフォーム(CustomerVatsType)があります。このエンティティには複数のバット行が含まれている列(vats)があります。これらの行はjson形式で保存されます。このフォームでは、顧客はデフォルトのVATを選択できます。これは、単位列に保存された行のインデックス "default"に保存されます。symfony 3ラジオ入力名の変更

しかし、フォームの構造上、無線入力名が「フォーム[vats] [0] [set_default]」であるという問題があります。しかし、無線入力が正しく機能するには、すべての入力に対して同じ入力が必要です(例:形式[vats] [set_default])。私はtwigファイルで名前を変更できますが、フォームクラスはこれを理解できません。

このような場合はどうすればよいですか。 Symfonyでもサポートしていますか?ここに私のフォームクラスがあります。

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)); 
    } 
} 
+1

私はtwigでフィールド名を設定すると、フォームフィールドでレスポンスフィールドをバインドできます。これを行うにはhandleRequestを使用してください。 –

+0

@AshishAwasthi。 。フィールド名を変更して、投稿にフィールドが存在しないというエラーを出しました。 handleRequestで投稿データを変更するにはどうすればいいですか?FormEventSubscriberが必要ですか? 。私が参照することができるいくつかのリソースを提供できますか? –

答えて

0

この問題では、以下の修正が行われました。私は他の開発者といくつかの本当に難しい方法を混同したくないので、少し汚れているようですが、ほとんどの意味があります。

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

誰でもきれいな方法を提案できれば、歓迎します。私はそれが共通の問題であるべきだと思う。他のアプローチをよく見たいですか?

関連する問題