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)。
自 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)。