Sonata Admin Bundle Type Collection Customisation

余生颓废 提交于 2019-12-04 11:26:33

问题


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:


回答1:


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



回答2:


The solution given by @likeitlikeit does not work for symfony2.0.

Somehow, hasParent() always return false.

As a workaround :

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

The name in a collection will be numeric (0, 1, 2,...) while in a solo form it will be a hash.



来源:https://stackoverflow.com/questions/12138016/sonata-admin-bundle-type-collection-customisation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!