Функция расширенного класса должна реализовывать интерфейс - PullRequest
0 голосов
/ 17 июня 2020

У меня есть класс Article, который расширяет класс пакета Article

class Article extends BaseArticle

BaseArticle имеет метод getImages

/**
 * {@inheritdoc}
 */
public function getImages(): Collection
{
    return $this->images;
}

проблема в том, что когда этот метод вызывается, я получаю эту ошибку:

Return value of Odiseo\BlogBundle\Model\Article::getImages() must implement interface Doctrine\Common\Collections\Collection, null returned

Я не совсем уверен, как я могу получить null, потому что это происходит только в панели администратора и работает хорошо в опубликованной c странице статей. Может быть проблема с расширением сущностей?

1 Ответ

0 голосов
/ 17 июня 2020

где-то строка

$this->images = new ArrayCollection();

отсутствует или заблокирована (обратите внимание, для этого вам понадобится предложение использования: use Doctrine\Common\Collections\ArrayCollection;).

Я вижу здесь две возможные причины :

  1. BaseArticle (то есть Article из пакета) НЕ содержит в __construct() ранее упомянутой строке.
  2. BaseArticle имеет эту линия, но ваш Article конструктор переопределяет (не вызывает родительский конструктор) и, таким образом, предотвращает его, и должен либо вызывать родительский конструктор, либо иметь эту строку.

Обе эти причины приводят методу, возвращающему null, поскольку свойство не инициализировано должным образом (правильная инициализация - это строка вверху), который, очевидно, не реализует интерфейс Collection, отсюда и сообщение об ошибке.

В качестве альтернативы , что-то устанавливает для свойства images значение null

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...