2017-08-20 24 views
1

1つのエンティティ属性に対して3つの選択フィールドが3つあります。下の写真が示すように。 enter image description hereSymfony - 1つのエンティティ属性の複数のフィールド

どの選択フィールドが使用されているかを検出する方法はありますか。その値を取得し、それを対応する属性でマップしますか?

パラメータをフォームタイプ(この例ではTestType、以下を参照してください)に送信することは可能ですか?私はそれを一般的なものにし、他の属性に再利用可能にしようとしています。

これは私が今まで持っているものです。

MyForm.php

<?php 

namespace MyBundle\Form; 

use MyBundle\Form\Type\TestType; 
use ..etc 

class MyForm extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     $builder 
      ->add('title',  TextType::class) 
      ->add('D1',   TestType::class); 

    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'MyBundle\Entity\Project' 
     )); 
    } 


    public function getBlockPrefix() 
    { 
     return 'mybundle_project'; 
    } 


} 

TestType.php

<?php 

namespace MyBundle\Form\Type; 

use Sonata\AdminBundle\Form\Type\Filter\ChoiceType; 
use ..etc 

class TestType extends AbstractType 
{ 
    /* 
    * private $myArray1; 
    * private $myArray2; 
    * private $myArray3; numberOfSeletcs 
    * private $numberOfSeletcs;   
    Secondary Question: Is it possible to send these values as parameters? 

    public function __construct($array1, $array2, $array3, $n) 
    { 
     $this->myArray1= $array1; 
     $this->myArray2= $array2; 
     $this->myArray3= $array3; 
     $this->numberOfSeletcs= $n; 

    } 


    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $myArray1 = array('label1'=>'','Value1'=>'Value1', 'Value2'=>'Value2','Value3'=>'Value3'); 
     $myArray2 = array('label2'=>'', 'Value4'=>'Value4','Value5'=>'Value5'); 
     $myArray3 = array('label3'=>'', 'Value6'=>'Value6','Value6'=>'Value6'); 

     $builder 
      // ... 
      ->add('H1', 'choice', array(
       'choices' => $myArray1, 
       'choice_attr' => ['label1' => ['disabled selected hidden'=>'']])) 
      ->add('H2', 'choice', array(
       'choices' => $myArray2, 
       'choice_attr' => ['label2' => ['disabled selected hidden'=>'']])) 
      ->add('H3', 'choice', array(
       'choices' => $myArray3, 
       'choice_attr' => ['label3' => ['disabled selected hidden'=>'']])); 
    } 


} 

感謝。

答えて

2

どの選択フィールドが使用されているかを検出するには、Javascriptを使用する必要があります。ご存知のように、SymfonyはPHPフレームワークでサーバ側で作業し、クライアントサイドのJavaScriptでイベントを検出する必要があります。あなたのフォームタイプへのパスパラメータは、この答えがありますtopic

+0

ありがとうございました。お返事の2番目の部分は解決策を見つけるのに役立ちました。これは私のために働いたものです:https://stackoverflow.com/questions/44390433/symfony-3-sending-the-options-argument-values-from-formtype-to-underformtype 私はあなたの最初の提案に取り組みます今。 – M20

+0

これは私が持っているところまでです。https://stackoverflow.com/questions/45787862/symfony-data-transformers-access-normalised-data jqueryスクリプトを実装して使用する選択フィールドを検出することができました。変更の兄弟はnull(ラベル値)を選択します。次に、どちらがnullでないかを調べます。しかし、私はデータトランスフォーマーに問題を発見しました。 – M20

関連する問題