我使用过Sonata Admin Bundle和Sonata Media Bundle。这很棒,但我有使用Media的问题。 https://sonata-project.org/bundles/media/2-2/doc/index.html
示例我有一个Post Document,在Post中我有$ image变量,targetDocument是Media。当我创建新帖子时,我必须上传图像文件,在保存帖子之前,我必须首先将上传图像文件保存到媒体实体,然后我将Post的$ 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
答案 0 :(得分:2)
答案在这里:
在上面的代码中,我们必须首先将上传图像保存到媒体,然后将其指向帖子:
$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;