2012-08-27 9 views
6

Per esempio io ho 3 soggetti:Sonata Admin Bundle Tipo Collection personalizzazione

  • Categoria
  • Sotto
  • prodotto

In SonataAdminBundle Mi piacerebbe essere in grado di aggiungere Sottocategoria mentre modifica di categoria e prodotti durante la modifica della sottocategoria.

Seguendo questa idea ho creato campi, ma SonataAdminBundle inizia a riprodurre "Inception" con loro.

Quando apro la categoria I vedo le sottocategorie correlate che contengono prodotti correlati.

Come posso tagliare il campo "Prodotti" in questo caso?

Aggiornamento:

mie classi (semplificato) simile a questa:

// .../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 è simile al seguente: enter image description here E in AdminBundle sembra che questo: enter image description here

risposta

5

Perché non provi qualcosa seguendo queste linee:

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

La soluzione fornita da @likeitlikeit non funziona per symfony2.0.

In qualche modo, hasParent() restituisce sempre false.

Per risolvere il problema:

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

Il nome in una collezione sarà numerica (0, 1, 2, ...), mentre in un assolo formare Sarà un hash.

Problemi correlati