Пакет 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;
}

И это все, что мне удалось избавиться от проблемы. и работает нормально.

Другие вопросы по тегам