Symfony Media捆绑包 - "无法在空变量上调用方法(" id")。"

时间:2018-03-04 23:06:08

标签: sonata-admin sonata-media-bundle symfony-3.4

环境

Symfony 3.4.4 + FOSBundleUser + Sonata Admin + Media Bundle

主题

我已经安装了Media Bundle。 我按照官方文档中指出的步骤配置了它。

我在我的实体产品中创建了一个字段,用于附加PDF格式的目录。

我在Sonata Adminel字段映射中添加了。

在Sonata Admin中查看产品列表时,没有问题,但在输入编辑或创建新产品时,请输入以下错误:

  

无法在空变量上调用方法(" id")。

这是我的字段的定义,用于在我的实体中附加PDF

/**
 * @var Media
 *
 * @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media")
 * @ORM\JoinColumns({
 *     @ORM\JoinColumn(name="fileCatalog_id", referencedColumnName="id")
 * })
 */
private $fileCatalog;

这是Sonata Admin表单中字段的映射

->add('fileCatalog', 'sonata_type_model_list', array(
                    'required' => false,
                    'label'=>'Imagen Español'
                ), array(
                        'link_parameters' => array(
                            'context' => 'default',
                            'provider' => 'sonata.media.provider.file',
                            'empty_on_new' => true,
                        )
                    )
                )

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但就我而言, 我的项目是针对多语言站点的,因此每个实体都有其支持的翻译实体(使用Knp \ DoctrineBehaviors), 所以我做的是.. 我在两个站点上都保留了媒体映射(ORM),例如假设Product和ProductTranslation,

namespace Website\ProductBundle\Entity;

use Knp\DoctrineBehaviors\Model as ORMBehaviors;

class Product implements TranslatableInterface
{

     use ORMBehaviors\Translatable\Translatable;

     ......
     ......

     /**
      * @var Media
      *
      * @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media",  cascade={"persist"}, fetch="LAZY")
      * @ORM\JoinColumn(referencedColumnName="id", onDelete="SET NULL", nullable=true)
      */
      protected $image;
}

namespace Website\ProductBundle\Entity;

use Knp\DoctrineBehaviors\Model as ORMBehaviors;

class ProductTranslation
{

     use ORMBehaviors\Translatable\Translation;

     ......
     ......

     /**
      * @var Media
      *
      * @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media",  cascade={"persist"}, fetch="LAZY")
      * @ORM\JoinColumn(referencedColumnName="id", onDelete="SET NULL", nullable=true)
      */
      protected $image;
}

这就是我所能解决的所有问题。而且效果很好。

答案 1 :(得分:0)

在我的情况下,我错过了将ORM导入Media实体类的操作。

use Doctrine\ORM\Mapping as ORM;

这就是修复所有的事情。