Sonata Admin Bundle Type Collection Customisation

sonata-admin, symfony, symfony-sonata

Solution

Why don't you try something along these lines:

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

Problem

For example I have 3 entities: - Category - Subcategory - Product In SonataAdminBundle I'd like to be able to add Subcategory while editing Category and Products while editing Subcategory. Following this idea I created fields, but SonataAdminBundle starts playing "Inception" with them. When I open Category I see related Subcategories which contain related Products. How can I cut off "Products" field in this case? Update: My classes (simplified) look like this: ``` // .../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 looks like this: And in AdminBundle it looks like this:

Original source