[英]Symfony Media bundle - “Impossible to invoke a method (”id“) on a null variable.”
环境
Symfony 3.4.4 + FOSBundleUser + Sonata Admin +媒体捆绑
学科
我已经安装了媒体捆绑包。 我已经按照官方文档中指定的步骤进行了配置。
我在实体产品中创建了一个字段,以附加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,
)
)
)
我遇到了同样的问题,但就我而言,我的项目是针对多语言站点的,因此每个实体都有其支持的翻译实体(使用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;
}
这就是我所能解决的所有问题。 而且效果很好。
就我而言,我错过了将ORM导入Media实体类的过程。
use Doctrine\ORM\Mapping as ORM;
这就是所有需要解决的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.