2012-08-27 8 views
6

私は3つのエンティティがありますソナタ管理バンドルタイプコレクションのカスタマイズたとえば

  • カテゴリー
  • サブカテゴリ
  • 製品を
  • 私はサブカテゴリしばらくを追加できるようにしたいと思いSonataAdminBundleで

サブカテゴリの編集中にカテゴリと製品を編集します。

私はフィールドを作成しましたが、SonataAdminBundleはそれらと「開始」を開始します。

カテゴリを開くと、関連する商品を含む関連するサブカテゴリが表示されます。

この場合、[商品]フィールドをどのように切断できますか?

更新:

私のクラス(簡体字)のようになります。

// .../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、...)の数値となります。

関連する問題