Пакет Symfony Media - "Невозможно вызвать метод ("id") для пустой переменной".
Среда
Symfony 3.4.4 + FOSBundleUser + Sonata Admin + Media Bundle
Предмет
Я установил Media Bundle. Я настроил его, следуя инструкциям в официальной документации.
Я создал поле в своей сущности Продукты, чтобы прикрепить каталог в формате PDF.
Я добавил в Соната 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,
)
)
)
3 ответа
У меня была та же проблема, и я решил ее, создав администратора для связанного дочернего объекта, присутствующего в родительском администраторе.
В моем случае я пропустил импорт ORM в класс сущности Media.
use Doctrine\ORM\Mapping as ORM;
Это было все, что нужно было исправить.
У меня была та же проблема, но в моем случае мой проект для мультиязычного сайта, поэтому у каждой сущности есть свои поддерживающие сущности перевода (используя 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;
}
И это все, что мне удалось избавиться от проблемы. и работает нормально.