TYPO3 v10:如何在 Backend/Scheduler 任务中访问 TSFE?

TYPO3 v10: How to access TSFE in Backend/Scheduler Task?

目前情况:
我正在尝试从后端(或者更确切地说是调度程序任务)访问前端的 TypoScript 配置。之前使用 Typo3 v8 和 v9,我初始化了整个 $GLOBALS["TSFE"] 对象,但是这已经是上一次破解(使用大部分已弃用的调用),现在它已在 v10 版本中全部删除。

我的目标:
从调度程序作业中访问特定页面前端的 TypoScript 配置(网站的根页面就可以)。

整个项目背景:
我有一个定期调度程序作业,可以向各种用户 (fe_users) 发送电子邮件。该电子邮件包含某些页面的链接(在拼写中配置的 UID)以及文件附件等(由其他扩展生成,也通过拼写完全配置)。目前,我基本上是从后端内部初始化整个前端,但正如我之前所说,它效率低下,超级 hacky,我怀疑这是否是解决此问题的预期方法。

这不会变得更好,也不打算这样做。我将用作配置:

  • 普通 PHP,例如在 $GLOBALS['TYPO3_CONF_VARS]`
  • YAML 站点配置(如果取决于各种站点)

您可以使用例如类似的东西

protected function generateUrl(int $pageId, int $recordId)
    {
        $additionalParams = 'tx_xxxx[action]=show&tx_ixxxx[controller]=Job&tx_xxxx[job]=' . $recordId;
        return BackendUtility::getPreviewUrl($pageId, '', null, '', '', $additionalParams);
    }

在后端获取 TypoScript 设置很难看,但可行。

您需要一个页面 ID 和一个可以传递给 \TYPO3\CMS\Core\TypoScript\TemplateService::runThroughTemplates() 的根行。

大致如下:

$template = GeneralUtility::makeInstance(TemplateService::class);
$template->tt_track = false;
$rootline = GeneralUtility::makeInstance(
  RootlineUtility::class, $pageId
)->get();
$template->runThroughTemplates($rootline, 0);
$template->generateConfig();
$typoScriptSetup = $template->setup;

你可以从\TYPO3\CMS\Extbase\Configuration\BackendConfigurationManager::getTypoScriptSetup\TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController

中获得灵感