Azi*_*ich 1 typo3 extbase symfony-console typo3-10.x
我正在升级一个扩展以与 TYPO3 v10 一起使用。由于命令控制器不能再使用,我将它们迁移到文档中指出的 symfony 命令。除了使用 extbase 存储库类之外,一切都运行顺利。无论我查询什么,我都不会得到结果。由于我在网络和文档上找不到任何有用的信息,我希望这可能只是一些小问题。
经过一段时间的调试后,我发现在构建查询设置时没有正确确定 pid。我觉得这很奇怪,因为我的根模板有这些行:
plugin.tx_myext.persistence.storagePid = 15403
module.tx_myext.persistence.storagePid = 15403
Run Code Online (Sandbox Code Playgroud)
存储库实例通过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);
}
Run Code Online (Sandbox Code Playgroud)
该方法利用了 ConfigurationManager 的单例状态。您只需手动注入扩展的静态模板,然后每个 extbase 复合(如存储库)将使用这些设置。迷人的。
但请注意,这很容易因未来的内部变化而中断。
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |