2012-08-01 98 views
0

我有這種形式的類我可以在symfony2的FormType類中構建兩個表單嗎?

class ProfileType extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder 

      ->add('name') 
      ->add('class') 
      ->add('age') 
      ->add('parent') 
    } 

我的問題是,我需要兩種形式之一,我需要所有的字段和一個用於前端,我需要幾場後臺。

我是否需要爲兩個窗體創建單獨的類,或者我可以以某種方式將兩個窗體放在一個類中,比如假設我不想在前端顯示父窗體。

的問題是,如果當我提交表單我顯示模板,然後這些字段設置爲null,只有少數領域。所以我需要從課程本身刪除

回答

1

您可以使用$ options參數。

$form = $this->createForm(new ProfileType(), $profile, array('status' => 'backend')); 

而在你buildForm:

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('name') 
      ->add('class') 
      ->add('age') 
      ->add('parent'); 

    if($options['status'] == 'backend') 
    { 
     $builder->add('other1') 
       ->add('other2'); 
    } 
} 

但它是一個相當骯髒的解決方案,我個人會產生兩種類型。

+0

它並不那麼髒。但我缺少函數setDefaultOptions(OptionsResolverInterface $ resolver)中的默認值 – 2015-11-10 07:58:06

0

默認選項加太:

class ProfileType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('name') 
      ->add('class') 
      ->add('age') 
      ->add('parent'); 

     if($options['status'] == 'backend') 
     { 
      $builder->add('other1') 
       ->add('other2'); 
     } 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Profile', 
      'status' => 'frontend', 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return 'appbundle_profile'; 
    } 
} 

現在你可以使用formtype無需額外的選項或額外的選項。如果沒有默認選項將被使用。

相關問題