Symfony Sonata Media Bundle 向用户添加 images/videos
Symfony Sonata Media Bundle add images/videos to a user
我正在尝试将 Sonata Media Bundle 集成到我的项目中。
问题是,我不明白捆绑包是如何工作的。
它已在 'Application' 内生成了 Media、Gallery 和 GalleryHasMedia class。他们有什么用?我现在如何向我的用户实体添加图像字段和视频字段? (均为复数)
此致,
新星
来自文档:
"备注
该命令将在应用程序命名空间中生成域对象。因此,您可以将实体的关联指向一个全局和通用的命名空间。这将使实体共享变得非常容易,因为您的模型将允许指向全局命名空间。例如,媒体将是 Application\Sonata\MediaBundle\Entity\Media。”
http://sonata-project.org/bundles/media/2-2/doc/reference/installation.html
几乎与使用 easy-extands 捆绑包时得到的一样。
您可以像使用任何实体一样使用它们,只是从不同的命名空间到您现有的实体。
至于在其他表单类型中使用它们,只需将媒体表单类型嵌入到您的用户表单类型中:http://sonata-project.org/bundles/media/2-2/doc/reference/form.html
要将字段添加到另一个实体,您只需添加带有 getter 和 setter 的 属性 并且(我们始终使用原则注释而不是 yaml)将媒体实体的注释添加为具有列名称的目标实体对于通常的 symfony 方式的关系类型(1:1,1:M,M:M 等)。
Media是保存视频/图片所有属性的Entity:宽度/高度/文件路径...
实体 Gallery 如果您想 link 多个媒体在一起(关于同一主题的视频/图片库)。
实体 GalleryHasMedia 是 link 画廊和媒体的实体。
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 和设置器:
php app/console doctrine:generate:entities TestBundle:User
您已准备好在您的用户实体中使用 SonataMedia。
更新
如果你想为一个用户管理多个图像,你必须这样做:
用户实体
class UserEntity
{
/**
* @var Media
*
* @ORM\OneToMany(targetEntity="Application\Sonata\MediaBundle\Entity\Media", mappedBy="user")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="images", referencedColumnName="id")
* })
*/
private $images;
}
Application\Sonata\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 设置表单的强制属性:context and provider
更新 2
问题二
如果您想要一个用户拥有多个画廊,您只需执行我在之前的更新中解释过的相同过程,唯一的区别是您应该创建一个新的 属性 例如:private $imageGalleries使用 targetEntity Gallery,在 Sonata 的 Gallery Entity 中添加 inversedBy,并在 SonataAdmin class 中添加新的 属性,只需将字段名称 images 更改为 imageGalleries。
问题三
在 Sonata 之外,您应该使用 sonata_media_type 形式来处理媒体。
http://sonata-project.org/bundles/media/2-0/doc/reference/form.html
因为你有一个 oneToMany 关系,所以它将是 sonata_media_type.
的集合
据我所知,没有处理画廊的表格。
我正在尝试将 Sonata Media Bundle 集成到我的项目中。 问题是,我不明白捆绑包是如何工作的。
它已在 'Application' 内生成了 Media、Gallery 和 GalleryHasMedia class。他们有什么用?我现在如何向我的用户实体添加图像字段和视频字段? (均为复数)
此致, 新星
来自文档:
"备注
该命令将在应用程序命名空间中生成域对象。因此,您可以将实体的关联指向一个全局和通用的命名空间。这将使实体共享变得非常容易,因为您的模型将允许指向全局命名空间。例如,媒体将是 Application\Sonata\MediaBundle\Entity\Media。” http://sonata-project.org/bundles/media/2-2/doc/reference/installation.html
几乎与使用 easy-extands 捆绑包时得到的一样。
您可以像使用任何实体一样使用它们,只是从不同的命名空间到您现有的实体。
至于在其他表单类型中使用它们,只需将媒体表单类型嵌入到您的用户表单类型中:http://sonata-project.org/bundles/media/2-2/doc/reference/form.html
要将字段添加到另一个实体,您只需添加带有 getter 和 setter 的 属性 并且(我们始终使用原则注释而不是 yaml)将媒体实体的注释添加为具有列名称的目标实体对于通常的 symfony 方式的关系类型(1:1,1:M,M:M 等)。
Media是保存视频/图片所有属性的Entity:宽度/高度/文件路径...
实体 Gallery 如果您想 link 多个媒体在一起(关于同一主题的视频/图片库)。
实体 GalleryHasMedia 是 link 画廊和媒体的实体。
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 和设置器:
php app/console doctrine:generate:entities TestBundle:User
您已准备好在您的用户实体中使用 SonataMedia。
更新
如果你想为一个用户管理多个图像,你必须这样做:
用户实体
class UserEntity
{
/**
* @var Media
*
* @ORM\OneToMany(targetEntity="Application\Sonata\MediaBundle\Entity\Media", mappedBy="user")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="images", referencedColumnName="id")
* })
*/
private $images;
}
Application\Sonata\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 设置表单的强制属性:context and provider
更新 2
问题二
如果您想要一个用户拥有多个画廊,您只需执行我在之前的更新中解释过的相同过程,唯一的区别是您应该创建一个新的 属性 例如:private $imageGalleries使用 targetEntity Gallery,在 Sonata 的 Gallery Entity 中添加 inversedBy,并在 SonataAdmin class 中添加新的 属性,只需将字段名称 images 更改为 imageGalleries。
问题三
在 Sonata 之外,您应该使用 sonata_media_type 形式来处理媒体。 http://sonata-project.org/bundles/media/2-0/doc/reference/form.html 因为你有一个 oneToMany 关系,所以它将是 sonata_media_type.
的集合据我所知,没有处理画廊的表格。