Symfony 2 Sonata 媒体包:在没有奏鸣曲管理员的情况下保存媒体文件图像
Posted
技术标签:
【中文标题】Symfony 2 Sonata 媒体包:在没有奏鸣曲管理员的情况下保存媒体文件图像【英文标题】:Symfony 2 Sonata Media bundle: saving media file image without sonata admin 【发布时间】:2016-07-03 11:00:02 【问题描述】:我使用的是 Sonata Admin Bundle 和 Sonata Media Bundle。很棒,但是我在使用 Media 时遇到了问题。 https://sonata-project.org/bundles/media/2-2/doc/index.html
示例我有一个 Post 文档,在 Post 中我有 $image 变量,其中 targetDocument 是 Media。并且当我创建新帖子时,我必须上传图片文件,在保存帖子之前,我必须先将上传的图片文件保存到媒体实体,然后我将帖子的$image指向刚刚保存的媒体实体。
发布文件:
<?php
namespace Acme\Bundle\PostBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @MongoDB\Document(repositoryClass="Acme\Bundle\PostBundle\Repository\PostRepository")
*/
class Post
/**
* @MongoDB\Id
*/
protected $id;
/**
* @MongoDB\String
*/
protected $name;
/**
* @MongoDB\ReferenceOne(targetDocument="Application\Sonata\MediaBundle\Document\Media", nullable=true )
*/
protected $image;
我们是否可以通过任何方式访问媒体实体并将上传文件保存到 Post Document 功能中。 我读过这篇文章,但没有更多帮助。
https://sonata-project.org/bundles/media/master/doc/reference/form.html
【问题讨论】:
【参考方案1】:答案就在这里:
在上面的代码中,我们必须先将上传的图片保存到媒体,然后将其指向帖子:
$mediaManager = $this->container->get('sonata.media.manager.media');
$media = new Media();
$media->setBinaryContent($uploadImage);
$media->setContext('default');
$media->setProviderName('sonata.media.provider.image');
$mediaManager->save($media);
$post->setImage($media);
print_r($media);exit;
【讨论】:
即使我使用use Sonata\MediaBundle\Entity\MediaManager;
,我也有Undefined variable: mediaManager
。如何访问 $mediaManager?
$mediaManager = $this->container->get('sonata.media.manager.media');
你能告诉我关于uploadImage的信息吗?我愿意创建一个将图像存储到媒体包的api以上是关于Symfony 2 Sonata 媒体包:在没有奏鸣曲管理员的情况下保存媒体文件图像的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2 Sonata Media Bundle -- 上传图片时出错
Symfony2 覆盖 Sonata 媒体图像提供程序。(将接口传递给构造函数)
Symfony 2.1 Sonata 管理包 OneToMany