2012-08-27 74 views
6

比如我有3個實體:索納塔管理軟件包類型集合定製

  • 類別
  • 子目錄
  • 產品

在SonataAdminBundle我希望能夠添加子類別,而在編輯子類別時編輯類別和產品。

按照這個想法我創建了字段,但是SonataAdminBundle開始與他們一起玩「Inception」。

當我打開類別I時,會看到包含相關產品的相關子類別。

在這種情況下,如何切斷「產品」字段?

更新:

我的課(簡體)是這樣的:

// .../CoreBundle/Admin/CategoryAdmin.php 
protected function configureFormFields(FormMapper $formMapper) { 
    $formMapper 
    ->add('name', null, array('required' => true)) 
    ->add('url', null, array('required' => true)) 
    ->add('subcategories', 'sonata_type_collection', array('by_reference' => true),  array(
    'edit' => 'inline', 
    'sortable' => 'pos', 
    'inline' => 'table',)); 
} 


// .../CoreBundle/Admin/SubcategoriesAdmin.php 
protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
      ->add('name', null, array('label' => 'name')) 
      ->add('category_id', null, array('label' => 'Category')) 
      ->add('url', null, array('label' => 'Url')) 
      ->add('products', 'sonata_type_collection', 
        array('by_reference' => false), 
        array(
         'edit' => 'inline', 
         'sortable' => 'pos', 
         'inline' => 'table', 
       )); 
} 

// .../CoreBundle/Admin/ProductsAdmin.php 
protected function configureFormFields(FormMapper $formMapper) { 
    $formMapper 
      ->add('name', null, array('label' => 'Заголовок')) 
      ->add('subcategory_id', null, array('label' => 'Subcategory')); 
} 

模式是這樣的: enter image description here 而在AdminBundle它看起來像這樣: enter image description here

回答

5

你爲什麼不嘗試沿着這些路線:

// .../CoreBundle/Admin/SubcategoriesAdmin.php 
protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
      ->add('name', null, array('label' => 'name')) 
      ->add('category_id', null, array('label' => 'Category')) 
      ->add('url', null, array('label' => 'Url')); 

    // only show the child form if this is not itself a child form 
    if (!$formMapper->getFormBuilder()->getForm()->hasParent()) { 
     $formmapper 
      ->add('products', 'sonata_type_collection', 
        array('by_reference' => false), 
        array(
         'edit' => 'inline', 
         'sortable' => 'pos', 
         'inline' => 'table', 
       )); 
    } 
} 
1

@likeitlikeit給出的解決方案不適用於symfony2.0。

不知何故,hasParent()總是返回false。

作爲一種變通方法:

if (!is_numeric($formMapper->getFormBuilder()->getForm()->getName())) {} 

一個集合中的名稱將是數字(0,1,2,...),而在一個單獨的形成這將是一個哈希值。