在 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 方法。特别是在多对多关系上,这是一个常见问题。
在 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 方法。特别是在多对多关系上,这是一个常见问题。