在sonata_type_collection中指定哪个admin_code?

时间:2018-02-20 15:28:24

标签: php symfony sonata-admin sonata-media-bundle

在Sonata项目中,我有一个Page实体和一个Media实体。我的Page实体包含images属性,该属性包含MediaCollection的Media实体。在我的Page实体中,我有以下工作代码:

            ->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的MediaCollection介质对象。)

我假设我需要使用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>

1 个答案:

答案 0 :(得分:1)

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