2016-04-21 54 views
0

由於關係有一個額外的屬性(布爾值),因此也必須表示爲一個實體,我在Symfony2中有以下模型。 enter image description here 我現在正在製作表格來標記參加各種考生(家長)的培訓的完成情況。
我使用嵌套形式如下:嵌套1:M表單顯示問題 - Symfony2

class TrainingCompletionType extends AbstractType 
    { 
     public function buildForm(FormBuilderInterface $builder, array $options) 
     { 
      $builder 
      ->add('titre', 'text', array('disabled' => 'true')) 
      ->add('Intervenant', 'collection', array(
            'type' => new TrainingCandidatesType(),'label'=>'Candidat(s)' 
            ,'options' => array('label'=>' ')) 
      ); 
     } 

這裏是TrainingCandidatesType形式

class TrainingCandidatesType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('parents','entity',array('class'=>'ParentsBundle:Parents' 
              ,'label'=>' ','disabled'=>true)) 
      ->add('completed') 
     ; 
    } 

此作品(提交父母的檢查完成的),但它會導致樹枝將每個父母作爲下拉列表呈現,並將每個父母都視爲值enter image description here。我已經禁用了下拉菜單,因爲用戶沒有從列表中選擇。候選人名稱並不意味着可以選擇。

有沒有辦法將每個父名稱顯示爲標籤,或者在Symfony中禁用文本輸入而不參考數據轉換器或事件訂閱者?
我已經瀏覽了Stack站點上的相關問題,但沒有發現與此問題非常相似的問題。

有沒有比這更好的方法,我願意嘗試?還是我從一個工作角度接近它?

回答

1

由於您只需要一個布爾值,所以使用擴展和多個選項是一個很好的選擇。

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('parents','entity',array(
        'class'=>'ParentsBundle:Parents', 
        'label'=>'Label', 
        'expanded'=>true, 
        'multiple'=>true 
      )) 
     ; 
    } 

但這樣你就需要數據轉換器。您也可以使用this bundle,它將爲您轉換數據,但比您需要的要多一點。

可能最好的選項也設置爲mapped=>false,並且選定的實體集合處理在控制器中創建的Training_Candidates實例。所選集合將被創建爲true,其餘部分需要從數據庫中加載並使用false創建。還要注意,用這種方法你不需要嵌套表單,你可以在單一表單中使用它。

希望這可以幫助你。

+0

感謝您的反饋!我認爲第二個選項更容易理解和實施。會試試看! –