2016-11-24 14 views
1

私はFormtypeです。このFormtypeの中でbuildFormにあるoptions - アレイの機能は、キーadditionalNameです。この値をFormType Name(Symfony3 BlockPrefix内)に追加したいと思います。しかし、私はこれをどのように設定できますか?symfony3:カスタムFormType "name"/"blockPrefix"を設定してください

class AdultType extends AbstractType 
{  
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $additionalName = $options['additionalName']; 

     $builder 
      ->add('account', TextType::class,array(
       'label' => 'account', 
       'required' => false, 
      )) 

     ; 
    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'My\Bundle\WebsiteBundle\Model\Adult', 
      'csrf_protection' => true, 
      'cascade_validation' => true, 
      'name' => "" 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getBlockPrefix() 
    { 
     //Here I need the $options['additionalName'] 
     return 'my_bundle_websitebundle_adult_'.$options['additionalName']; 
    } 

私はbuildForm機能でそれを設定し、getBlockPrefix機能で$this->additionalNameとそれへのアクセスを取得し、クラスの先頭に変数プライベート$additionalName;を設定することが出回ってみました。しかし、getBlockPrefixの値は空です。だから、buildFormの前にgetBlockPrefixが呼び出されたと思う。

タイプは別のフォームから呼び出さbeeingてさ:任意の助け

$builder->add('adult', AdultType::class, array(
         'additionalName' => $options['name'] 
        )); 

ありがとう!

+2

ブロックプレフィックスを動的に変更して解決したい実際のユースケースは何ですか? – xabbuh

答えて

-1

これを試してみてください:

class AdultType extends AbstractType 
{ 
    protected $_additionalName; 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $this->_additionalName = $options['additionalName']; 

     $builder 
      ->add('account', TextType::class,array(
       'label' => 'account', 
       'required' => false, 
      )) 

     ; 
    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'My\Bundle\WebsiteBundle\Model\Adult', 
      'csrf_protection' => true, 
      'cascade_validation' => true, 
      'name' => "" 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getBlockPrefix() 
    { 
     //Here I need the $options['additionalName'] 
     return 'my_bundle_websitebundle_adult_'.$this->_additionalName; 
    } 

    public function getName(){ 
     return $this->getBlockPrefix(); 
    } 
} 

getBlockPrefixが$オプション[ 'additionalName']を知っイマイチ、したがって、あなたは、クラスのプロパティを必要としています。そして、あなたは()のgetNameで

+0

"$ this - > _ additionalName"変数は "getBlockPrefix"で呼び出すときにnullです。 – Zwen2012

+0

タイプの呼び出し方法を表示できますか? – Rawburner

+0

私の編集したコードを見てください – Zwen2012

0

を試すことができ、追加の私はあなたがそのようなあなたにformTypeにプロパティを追加することをお勧め:

class AdultType extends AbstractType 
{  
    protected $_additionalName; 

    public function __construct($additionalName= ''){ 
     $this->_additionalName = $additionalName; 
    } 


    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $additionalName = $options['additionalName']; 

     $builder 
      ->add('account', TextType::class,array(
       'label' => 'account', 
       'required' => false, 
      )) 

     ; 
    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'My\Bundle\WebsiteBundle\Model\Adult', 
      'csrf_protection' => true, 
      'cascade_validation' => true, 
      'name' => "" 
     )); 
    } 

    /* 
    * @return string 
    */ 
    public function getBlockPrefix() 
    { 
     //Here I need the $options['additionalName'] 
     return 'my_bundle_websitebundle_adult_'.$this->_additionalName; 
    } 

EDIT:

Arfの..私はそれだけで利用可能だと思います前のSymfony 2の場合(012)。

関連する問題