Typo3 - Как получить контекст extbase в symfony commandController - PullRequest
3 голосов
/ 20 января 2020

Начиная с TYPO3 v9.4, командный контроллер extbase устарел, поэтому я использую замену консольной команды symfony в соответствии с: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/CommandControllers/Index.html#cli -mode

Теперь мой FooCommandController выходит из Symfony \ Component \ Console \ Command \ Command

Поскольку мне нужно работать с данными TYPO3, мне нужно получить их через репозитории extbase. Но весь мой CommandController не имеет контекста extbase, поэтому загрузка репо с помощью внедрения зависимостей extbase невозможна.

Также невозможно создать их вручную с помощью makeInstance или objectManager-> get (), поскольку объектный менеджер недоступен в этом контексте.

Как правильно / не хакерский способ получить доступ ко всем функциям extbase внутри symfony commandController?

Ответы [ 2 ]

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

Вы уже на правильном пути. Вам просто нужен экземпляр ObjectManager:

use TYPO3\CMS\Extbase\Object\ObjectManager;
...

$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$repo = objectManager->get(FooRepository::class);

В TYPO3 v10 мы можем использовать Symfony внедрение зависимостей (https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/DependencyInjection/Index.html).

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

Самый простой, но не рекомендуемый способ - извлечь ObjectManager через makeInstance() и использовать get() для него.

Лучшим способом было бы отделить ваши логики c в Пользовательский класс, который использует Dependency Injection из Extbase. Затем вы можете получить этот класс таким же способом.

С V10 вы сможете просто ввести, поскольку DI доступен за пределами Extbase.

...