2016-12-01 6 views
0

私は次の形式を持っている:私は、フォームのオプション(symfonyの3つの修正)を経由してtestArgument属性の値を渡していますsymfonyの3フォームconfigureOptionsに引数を渡す

class TestFormType extends AbstractType 
{ 
    protected $testArgument; 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     if (isset($options['testArgument'])) { 
      $this->testArgument = $options['testArgument']; 
     } 

     $builder->add('textField', 'Symfony\Component\Form\Extension\Core\Type\TextType'); 
    } 

    public function configureOptions(OptionsResolver $optionsResolver) 
    { 
     $optionsResolver->setRequired('testArgument'); 

     $optionsResolver->setDefaults(
      array(
       'data_class' => get_class($this->testArgument) 
      ) 
     ); 
    } 
} 

が、クラス名を取得するために来ているときconfigureOptionsメソッド内に'data_class'を設定する属性の値は、常にnullです。基本的には、私はconfigureOptionsメソッド内のフォームタイプのクラス属性に依存する必要があります。誰かが正しい方向に私を助けてもらえますか?

私は、フォームの工場 create方法自体から configureOptions方法で依存関係に合格しなければならなかった
+0

php docによると 'get_class'は' object'がインスタンスであるクラスの名前を返します。 objectがオブジェクトでない場合、 'FALSE'を返します。 クラス内でobjectが省略された場合は、そのクラスの名前が返されます。おそらく 'get_class'はオブジェクトを渡さないのでfalseを返します。 –

+0

buildFormよりも前にかなりのconfigureOptionsが呼び出されます。確認するためにいくつかのステートメントを追加するかもしれません。さらに重要なのは、フォームシステムは特定のタイプのオブジェクトを1つだけ作成することです。したがって、このタイプの2つの異なるインスタンスがあり、それぞれが異なるdata_classを持つことを計画している場合は、まったく動作しません。 – Cerad

+0

@MohammadZareMoghadam: '' BuildForm'の前に 'configureOptions'が実行されるので常に' 'TestFormType''を返します。 –

答えて

0

:それはフォームタイプでデフォルト設定によって設定され、フォームタイプのクラスをリファクタリングしなければならなかったことはないよう

$form = $this->factory->create(
      'app\TestBundle\Form\Type\TestFormType', 
      $this->testArgument, 
      array(
       'data_class' => get_class($this->testArgument) 
      ) 
     ); 

class TestFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('textField', 'Symfony\Component\Form\Extension\Core\Type\TextType'); 
    } 
} 
関連する問題