Typo3 - 如何在 symfony commandController 中获取 extbase 上下文

Typo3 - How to get the extbase context within a symfony commandController

自 TYPO3 v9.4 以来,extbase commandController 已被弃用,因此我根据以下内容使用 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 依赖注入加载 repo。

也无法通过 makeInstance 或 objectManager->get() 手动创建它们,因为在此上下文中没有可用的 objectManager。

在 symfony commandController 中访问 extbase 功能的 correct/non-hacky 方法是什么?

"easiest" 但不推荐的方法是通过 makeInstance() 获取 ObjectManager 并在其上使用 get()

更好的方法是在自定义 class 中分离您的逻辑,它使用 Extbase 的依赖注入。然后你可以用同样的方法获取这个class。

使用 V10,您可以直接注入,因为 DI 在 Extbase 之外可用。

您已经走在正确的道路上。您只需要一个 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)。