typo3 - 在 Symfony 命令中使用 Extbase 存储库
问题描述
我正在升级一个扩展以使用 TYPO3 v10。由于命令控制器不能再使用,我将它们迁移到文档中指出的 symfony 命令。除了使用 extbase 存储库类之外,一切都非常顺利。无论我查询什么,我都没有得到结果。由于我在网络和文档上找不到任何有用的信息,我希望这可能只是一些小问题。
经过一段时间的调试后,我发现在构建查询设置时没有正确确定 pid。我觉得这种奇怪,因为我的根模板有以下几行:
plugin.tx_myext.persistence.storagePid = 15403
module.tx_myext.persistence.storagePid = 15403
存储库实例由 injectMyRepository() 方法正确注入。我尝试使用 extbase ObjectManager 来获取类实例,但“错误”保持不变。
我做错了什么还是不能在 symfony 命令中使用 extbase 存储库类?
解决方案
经过更多研究后,我发现缺少一些引导程序,导致扩展设置(在我的情况下为 storageID)未加载。从我一直在阅读的内容来看,我猜这种行为似乎是为了防止 extbase 启动?
官方文档中有类似内容的引用:https ://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/CommandControllers/Index.html#initialize-backend-user 知道那,我试图找到一种方法来初始化我找不到的缺失设置。所以这确实看起来像是一个缺失的功能。
我开发了一个我不太引以为豪的解决方法,但总比没有好(或就此将一切重建为教义)。如果你偶然发现了同样的问题,那就去吧。只需在触发查询之前插入并调用此方法:
public static function initializeConfigurationManager(): void
{
/** @var ConfigurationManager $configurationManager */
$configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
$tmpConfiguration = $configurationManager->getConfiguration(
ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK,
'myExtensionName'
);
$configurationManager->setConfiguration($tmpConfiguration);
}
该方法利用了 ConfigurationManager 的单例状态。您只需手动注入扩展的静态模板,然后每个 extbase 化合物(如存储库)将从那里使用这些设置。迷人的。
但是请注意,这很容易随着未来的内部变化而中断。
推荐阅读
- java - 如何以表格格式打印我的数组列表值
- excel - 不同用户的日期排序宏问题
- python - 如何解决 IndexError: list index out of range in a list of dict?
- r - 检查电子邮件列中的名称是否重复
- azure-batch - Azure Batch 作业发布任务未运行
- python - 如何在python中的3维数组中进行连接组件标记?
- java - 是否可以在现代浏览器网页中嵌入 java swing 应用程序?
- c# - 如何使用 Pupeetersharp 从元素中获取计算的样式属性
- python - 使用 rpy2 指定名称中包含点的参数
- powershell - Powershell 自动完成转义特殊字符并使用单引号