在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>
答案 0 :(得分:1)
如果在另一个管理员中编辑集合,则必须将by_reference选项设置为false。这是为了在嵌入对象上调用setter方法。特别是在许多关系中它是一个常见的问题。