2016-11-24 3 views
1

나는 Formtype입니다. 이 Formtype에서 options - 배열 buildForm에있는 기능은 키 additionalName입니다. 이 값을 FormType 이름 (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']; 
    } 

나는, 클래스의 상단에 변수 개인 $additionalName;을 설정 buildForm 기능에서 설정하고 getBlockPrefix 기능에 $this->additionalName와에 대한 액세스 권한을 얻을 수 allready했습니다. 그러나 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; 
    } 

편집 :

멍멍은 .. 내가 생각에만 사용할 수 있습니다 symfony 2 이전 버전 (2.8) ..