Symfony Sonata Media Bundle将图像/视频添加到用户

nov*_*.cp 7 php symfony sonata-media-bundle sonata

我正在尝试将Sonata Media Bundle集成到我的项目中.问题是,我不明白捆绑是如何工作的.

它在"应用程序"中生成了Media,Gallery和GalleryHasMedia类.它们适用于什么?我现在如何向我的用户实体添加图像字段和视频字段?(复数)

问候,新星

Hyp*_*peR 21

媒体是保存视频/图片所有属性的实体:宽度/高度/文件路径...

如果您想要将多个媒体链接在一起(有关同一主题的视频/图片库),实体非常有用.

Entity GalleryHasMedia是链接Gallery和Media的实体.

SonataMedia安装在Bundle应用程序中,因此您可以根据需要轻松扩展和更改代码.

如果您想向用户添加媒体或图库,您只需执行以下操作:

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;
}
Run Code Online (Sandbox Code Playgroud)

使用控制台重新生成getter和setter:

php app/console doctrine:generate:entities TestBundle:User
Run Code Online (Sandbox Code Playgroud)

您将在您的用户实体中使用SonataMedia.

UPDATE

如果要为用户管理多个图像,则必须执行以下操作:

UserEntity

class UserEntity
{
    /**
     * @var Media
     *
     * @ORM\OneToMany(targetEntity="Application\Sonata\MediaBundle\Entity\Media", mappedBy="user")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="images", referencedColumnName="id")
     * })
     */
    private $images;
}
Run Code Online (Sandbox Code Playgroud)

应用\索纳塔\ MediaBundle \实体\媒体

class Media
{
    /**
      * @var User
      *
      * @ORM\ManyToOne(targetEntity="UserEntity", inversedBy="images")
      * @ORM\JoinColumns({
      *     @ORM\JoinColumn(name="user", referencedColumnName="id")
      * })
      */
    private $user;
} 
Run Code Online (Sandbox Code Playgroud)

UserAdmin

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'
            )
        ))
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过更改编辑和内联属性来更改显示,link_parameters设置表单的强制属性:context和provider

更新2

问题2

如果您想为用户创建多个图库,您只需执行我在上一次更新中说明的相同过程,唯一的区别是您应该创建一个新属性,例如:private $ imageGalleries with targetEntity Gallery,添加inversedBy in Sonata的Gallery Entity并在SonataAdmin类中添加新属性,只需将字段名称图像更改为imageGalleries即可.

问题3

在Sonata之外,您应该使用sonata_media_type表单来处理Media. http://sonata-project.org/bundles/media/2-0/doc/reference/form.html 因为你有一个oneToMany关系,它将是sonata_media_type的集合.

我知道没有办法处理画廊.