2012-08-27 6 views
6

Zum Beispiel habe ich drei Einheiten:Sonata Admin-Bundle-Typ-Sammlung Customization

  • Kategorie
  • Unter
  • Produkt

In SonataAdminBundle würde ich Unter während in der Lage sein möchte hinzufügen Bearbeiten von Kategorie und Produkten während der Bearbeitung der Unterkategorie.

Nach dieser Idee habe ich Felder erstellt, aber SonataAdminBundle beginnt "Inception" mit ihnen zu spielen.

Wenn ich die Kategorie öffne, sehe ich verwandte Unterkategorien, die verwandte Produkte enthalten.

Wie kann ich in diesem Fall das Feld "Produkte" abschneiden?

Update:

Meine Klassen (vereinfacht) wie folgt aussehen:

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

Schema sieht wie folgt aus: enter image description here Und in AdminBundle sieht es wie folgt aus: enter image description here

Antwort

5

Warum versuchst du nicht etwas in dieser Richtung:

// .../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

Die von @likeitliteit angegebene Lösung funktioniert nicht für symfony2.0.

Irgendwie gibt hasParent() immer false zurück.

Zur Umgehung des Problems:

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

Der Name ist in einer Sammlung wird numerisch sein (0, 1, 2, ...), während in einem Solo bilden wird es ein Hash sein.