TYPO3 10: ошибка: вызов функции-члена findByUid () - PullRequest
0 голосов
/ 20 января 2020

Я обновил инъекцию зависимостей в моем контроллере, теперь это выглядит так:

class MyExtensionController extends ActionControlelr
{
 /**
 * @ var MyExtensionRepository
 /**
 protected $myRepository
..
..
..

Но вызов репозитория в следующей функции, такой как

public function indexAction()
{
    // get needed info
    /** @var Category $category */
    $category = $this->myRepository->findByUid($this->settings['flexForm']['categoryId']);

, возвращает ошибку:

Error: Call to a member function findByUid() on null

Services.yaml выглядит так:

services:
  _defaults:
    autowire: true
    autoconfigure: true
    public: false

  REP\MyExtension\:
    resource: '../Classes/*'

Есть идеи?

Спасибо

Ответы [ 2 ]

1 голос
/ 20 января 2020

Похоже, вы смешиваете TYPO3 и Symphony. Все, кроме Services.yaml, выглядит как TYPO3.

В контроллере TYPO3 вы должны внедрить репозиторий. Вы можете сделать это, используя аннотацию @inject рядом с объявлением переменной. Вы также должны использовать полное пространство имен там. Затем вы должны очистить все кэши, и это должно работать.

Пожалуйста, исправьте весь свой комментарий.

    /**
     * @var \Full\Path\To\Repository\MyExtensionRepository
     * @inject
     */
     protected $myRepository
0 голосов
/ 20 января 2020

Хорошо, я нашел ошибку. По-видимому, для внедрения зависимостей должен быть реализован конструктор. В этом случае добавление

/**
* @param MyExtensionRepository $myRepository
*/
public function __construct(MyExtensionRepository $myRepository)
{
 $this->myRepository = $myRepository;
}

работает как шарм:)

...