8

たとえば、次の 3 つのエンティティがあります。

  • カテゴリー
  • サブカテゴリ
  • 製品

SonataAdminBundle では、Subcategory の編集中に Category と Products の編集中に Subcategory を追加できるようにしたいと考えています。

このアイデアに従ってフィールドを作成しましたが、SonataAdminBundle はそれらで "Inception" を再生し始めます。

カテゴリを開くと、関連する製品を含む関連するサブカテゴリが表示されます。

この場合、「製品」フィールドを切り捨てるにはどうすればよいですか?

アップデート:

私のクラス(簡略化)は次のようになります。

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

スキーマは次のよう になります。 ここに画像の説明を入力 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 に答える