AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77151557
Accepted
Stoppeye
Stoppeye
Asked: 2023-09-21 23:16:39 +0800 CST2023-09-21 23:16:39 +0800 CST 2023-09-21 23:16:39 +0800 CST

TYPO3 TemplateService 弃用:如何获取插件打字稿?(不在 FE 上下文中并且没有 extbase)

  • 772

在 V12 中,TemplateService和TypoScriptParser类已被标记为已弃用(#99020 - 弃用 TypoScript/TemplateService)。那里给出的迁移建议非常稀缺(带有 PSR-7 请求的 FE 范围)并且坦率地说不能令人满意。

plugin.tx_myplugin_pi1 { ... }如果您不在FE 上下文中,例如在中间件、控制台命令或 BE 模块中,如何读取插件的 TypoScript 配置(类似)?有时你还想读取不同扩展的 TS 配置。
是的,我知道,插件是一个 FE 内容元素,并且在特定页面的上下文中执行(该页面的根线中可能有一系列继承的 TS 模板)等等。

但仍然有一些有效的场景需要您这样做。假设我们有一个控制台命令,它将插件生成的数据发送到远程 API,并且我们希望使用与最初生成数据的页面上活动的相同设置来处理数据。如果控制台命令具有该页面 uid 的命令行参数,则获取该特定 TS 配置应该不成问题。

到目前为止,我使用的辅助方法可能看起来像这样:

private function getTsConf($pageUid, $pluginName = 'tx_myplugin_pi1') {
    $rootlineUtility = GeneralUtility::makeInstance(RootlineUtility::class, $pageUid);
    $rootline = $rootlineUtility->get();

    $templateService = GeneralUtility::makeInstance(TemplateService::class);
    $templateService->tt_track = 0;
    $templateService->runThroughTemplates($rootline);
    $templateService->generateConfig();

    $tsService = GeneralUtility::makeInstance(TypoScriptService::class);
    return isset($templateService->setup['plugin.'][$pluginName.'.']) 
        ? $tsService->convertTypoScriptArrayToPlainArray($templateService->setup['plugin.'][$pluginName.'.']) 
        : [];
}

TemplateService那么,在这种情况下,如果不再可用,您应该做什么?

对我来说,这是我几乎在每个项目中都会遇到的问题。我真的认为,这是一项标准任务,应该很容易处理。但我觉得缺乏针对非 FE 场景的文档。

typo3
  • 1 1 个回答
  • 31 Views

1 个回答

  • Voted
  1. Best Answer
    Christian Kuhn
    2023-09-21T23:45:49+08:002023-09-21T23:45:49+08:00

    目前没有工厂可以检索特定页面的 FE TS。

    有问题的代码必须从 TypoScriptFrontendController 中提取,它需要首先提取“缓存”相关的内容。我们将在 v13 中继续解决这个问题,但 v12 不会有一个简单的解决方案。

    我本来希望 v12 在这个领域有更多的补丁,但考虑到时间和版本限制以及大量的旧代码,这实在是太多了。我们现在刚刚在 v13 中进行后续步骤,我希望当周围的许多尘埃落定时,我们最终会在 v13 中得到一个易于使用的 API。

    我在 v12 中看到了这些替代方案:

    • 当从 BE 或 CLI 中执行 FE 请求时,创建一个请求对象,将其提供给前端/应用程序(称为子请求,FE 错误处理和 FE 功能测试执行类似的操作)以检索响应。这将触发整个FE链,包括TS计算。

    • 使用 extbase ConfigurationManager 检索 FE TS。ConfigurationManager 本身就是一项技术债务,但很难摆脱它,并且在我们在 v12 中缓解了它的一些缺陷后,它还会继续存在一段时间。

    • 使用 v12 中旧的已弃用的 TS 类,并使用 v13 切换到更好的解决方案。

    • 当您不需要如此复杂的缓存机制时,将代码从 TypoScriptFrontendController getFromCache() 复制到您的扩展,也许可以简化/缩短它。它有点长,但有详细记录......应该可以通过查看它来理解和理解。

    • 3

相关问题

  • TYPO3 11.5.30 传统模式/引导更新后错误/未定义函数 mb_split

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve