Media https://github.com/sonata-project/SonataMediaBundle/blob/master/Model/Media.php是保存视频/图片所有属性的实体:宽度/高度/文件路径...
实体Gallery https://github.com/sonata-project/SonataMediaBundle/blob/master/Model/Gallery.php如果您想将多个媒体链接在一起(有关同一主题的视频/图片库),则非常有用。
实体画廊有媒体 https://github.com/sonata-project/SonataMediaBundle/blob/master/Model/GalleryHasMedia.php是连接图库和媒体的实体。
SonataMedia 安装在捆绑应用程序中,因此您可以根据需要轻松扩展和更改代码。
如果您想向用户添加媒体或图库,您只需执行以下操作:
class UserEntity
{
/**
* @var Media
*
* @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="picture", referencedColumnName="id")
* })
*/
private $picture;
/**
* @var Gallery
*
* @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Gallery")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="gallery", referencedColumnName="id")
* })
*/
private $gallery;
}
使用控制台重新生成 getter 和 setter:
php app/console doctrine:generate:entities TestBundle:User
您将在您的用户实体中使用 SonataMedia。
UPDATE
如果你想为一个用户管理多个图像,你必须这样做:
用户实体
class UserEntity
{
/**
* @var Media
*
* @ORM\OneToMany(targetEntity="Application\Sonata\MediaBundle\Entity\Media", mappedBy="user")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="images", referencedColumnName="id")
* })
*/
private $images;
}
应用程序\奏鸣曲\MediaBundle\Entity\Media
class Media
{
/**
* @var User
*
* @ORM\ManyToOne(targetEntity="UserEntity", inversedBy="images")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user", referencedColumnName="id")
* })
*/
private $user;
}
用户管理
class UserAdmin
{
public function configureFormFields(FormMapper $formMapper)
{
$formMapper->add('images', 'sonata_type_collection', array(), array(
'edit' => 'inline',
'inline' => 'table',
'link_parameters' => array(
'context' => 'images',
'provider' => 'sonata.media.provider.image'
)
))
}
}
您可以通过更改编辑和内联属性来更改显示,link_parameters 设置表单的强制属性:背景和提供者 http://sonata-project.org/bundles/media/2-2/doc/reference/installation.html#id1
UPDATE 2
问题2
如果您想要为用户提供多个画廊,您只需执行我在之前的更新中解释的相同过程,唯一的区别是您应该创建一个新属性,例如:带有 targetEntity Gallery 的 private $imageGalleries,将 inversedBy 添加到Sonata 的 Gallery 实体,并通过仅将字段名称 images 更改为 imageGalleries 来在 SonataAdmin 类中添加新属性。
问题3
在 Sonata 之外,您应该使用 sonata_media_type 形式来处理媒体。http://sonata-project.org/bundles/media/2-0/doc/reference/form.html http://sonata-project.org/bundles/media/2-0/doc/reference/form.html因为你有一个 oneToMany 关系,它将是 sonata_media_type 的集合。
据我所知,没有任何表格可以处理画廊。