2012-08-27 19 views
6

Ben 3 varlık vardır:Sonata Yönetici Paketi Tipi Koleksiyon Özelleştirme Örneğin

  • Kategori
  • Alt kategori
  • Ürün
  • Ben Alt kategori süre eklemek mümkün istiyorum SonataAdminBundle yılında

Alt Kategoriyi düzenlerken Kategori ve Ürünleri düzenleme.

Bu fikri takip ederek alanlar oluşturdum, ancak SonataAdminBundle onlarla "Inception" oynamaya başlar.

Kategori I'i açtığımda ilgili Ürünleri içeren ilgili Alt Kategorileri görüyorum.

Bu durumda "Ürünler" alanını nasıl kesebilirim?

Güncelleme:

Derslerim (basitleştirilmiş) şu şekilde görünür: enter image description here Ve AdminBundle o şuna benzer:: enter image description here

cevap

5

// .../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')); 
} 

Şema şuna benzer Neden bu satırlarda bir şey denemiyorsunuz:

// .../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 tarafından verilen çözüm, symfony2.0 için çalışmaz.

Bir şekilde, hasParent() her zaman false değerini döndürür. Geçici bir çözüm olarak

: yalnız oluşturacak bir süre

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

Bir koleksiyondaki adı sayısal olacaktır (0, 1, 2, ...) bir karma olacak.