8

例如,我有 3 个实体:

  • 类别
  • 子类别
  • 产品

在 SonataAdminBundle 中,我希望能够在编辑类别时添加子类别,在编辑子类别时添加产品。

按照这个想法,我创建了字段,但 SonataAdminBundle 开始与他们一起玩“盗梦空间”。

当我打开类别时,我会看到包含相关产品的相关子类别。

在这种情况下如何切断“产品”字段?

更新:

我的课程(简化)如下所示:

// .../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 看起来像这样: 在此处输入图像描述 在 AdminBundle 中看起来像这样: 在此处输入图像描述

4

2 回答 2

6

你为什么不尝试这些方面的东西:

// .../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',
                  ));
    }
}
于 2012-09-12T00:55:46.570 回答
1

@likeitlikeit 给出的解决方案不适用于 symfony2.0。

不知何故,hasParent() 总是返回 false。

作为一种解决方法:

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

集合中的名称将是数字(0、1、2,...),而在单独的形式中,它将是一个哈希。

于 2013-09-17T08:32:36.017 回答