php - Symfony Sonata Media Bundle 向用户添加图像/视频

标签 php symfony sonata sonata-media-bundle

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

它在“Application”中生成了 Media、Gallery 和 GalleryHasMedia 类。他们有什么用?我现在如何向我的用户实体添加图像字段和视频字段? (均为复数)

问候, 新星

最佳答案

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

实体 Gallery如果您想将多个媒体链接在一起(关于同一主题的视频/图片库),这很有用。

实体 GalleryHasMedia是链接图库和媒体的实体。

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。

更新

如果你想为一个用户管理多个图像,你必须这样做:

用户实体

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

问题 2

如果你想为一个用户使用多个画廊,你只需要执行我在之前更新中解释的相同过程,唯一的区别是你应该创建一个新属性,例如:private $imageGalleries 和 targetEntity Gallery,添加Sonata Gallery 实体中的 inversedBy,并通过仅将字段名称 images 更改为 imageGalleries,在您的 SonataAdmin 类中添加新属性。

问题 3

在 Sonata 之外,您应该使用 sonata_media_type 形式来处理媒体。 http://sonata-project.org/bundles/media/2-0/doc/reference/form.html 因为您有 oneToMany 关系,所以它将是 sonata_media_type 的集合。

据我所知,没有处理画廊的表格。

关于php - Symfony Sonata Media Bundle 向用户添加图像/视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28921077/

相关文章:

php - 无法将 C :/php/php7apache2_4. dll 加载到服务器:%1 不是有效的 Win32 应用程序

php - 使用 Symfony 5 配置 Mercure

routing - 在 Symfony2 中调试路由

php - 安装奏鸣曲电子商务错误

php - 如何根据用户使自定义操作不可访问 - Sonata Admin

php - DHT11 温度/湿度传感器 Web 服务错误

自定义 php 函数中的 PHPMailer

php - "Build"JS变量

Symfony 2.2 Doctrine ResolveTargetEntities 监听器

symfony - 没有与上下文相关的主要类别 : default