在 sonata_type_collection 中指定哪个 admin_code?

Which admin_code to specify in sonata_type_collection?

在 Sonata 项目中,我有一个 Page 实体和一个 Media 实体。我的页面实体包含一个 images 属性,其中包含媒体实体的 ArrayCollection。在我的页面实体中,我使用以下工作代码:

            ->add('galleries', 'sonata_type_collection', array(
                'label' => "Galleries",
                //'cascade_validation' => true,
                'required' => false,
            ), array(
                'edit' => 'inline',
                'inline' => 'table',
            ))

... 这在我的页面编辑屏幕上为我提供了一个很好的内联表单,允许我内联创建和关联画廊。

但是当我尝试这个时:

            ->add('images', 'sonata_type_collection', array(
                'label' => "Standalone Images",
                //'cascade_validation' => true,
                'required' => false,
            ), array(
                'edit' => 'inline',
                'inline' => 'table',
            ))

...我发现我得到一个空白复选框,没有任何形式。 (页面的 images 字段包含来自 Sonata Media Bundle 的媒体对象的 ArrayCollection。)

我假设我需要使用 admin_code 选项来指定管理值。我应该在该选项中输入什么字符串?

===

编辑 #1:

通过改变这个:

                ->add('images', 'sonata_type_collection', array(
                    'label' => "Standalone Images",
                    'required' => false,
                ), array(
                    'edit' => 'inline',
                    'inline' => 'table',
                ))

...为此:

                ->add('images', 'sonata_type_collection', array(
                    'label' => "Standalone Images",
                    'required' => false,
                ), array())

...我能够得到一个模式框来显示以创建新的媒体实体。

但是,我发现新的媒体实体没有出现在我的页面编辑屏幕上。所以这只能部分解决问题。

===

编辑#2:

一点日志记录显示我的 Page 实体的 getImages() 方法被调用,但同一个实体的 setImages() 和 addImage() 方法没有被调用。我不确定如何强制应用程序调用这些方法,也不知道如何确保将正确的媒体实体提供给这些方法。

===

编辑 #3:

这是我的 Page.orm.xml 文件中的映射:

    <many-to-many field="images" target-entity="Application\Sonata\MediaBundle\Entity\Media">
        <cascade>
            <cascade-persist />
        </cascade>
        <join-table name="page_image">
            <join-columns>
                <join-column name="page_id" referenced-column-name="id" />
            </join-columns>
            <inverse-join-columns>
                <join-column name="image_id" referenced-column-name="id" unique="true" />
            </inverse-join-columns>
        </join-table>
    </many-to-many>

如果您在另一个管理员中编辑 collections,则必须将 by_reference 选项设置为 false。那是为了在嵌入式 objects 上调用 setter 方法。特别是在多对多关系上,这是一个常见问题。