diff --git a/typo3/sysext/extbase/Classes/Configuration/BackendConfigurationManager.php b/typo3/sysext/extbase/Classes/Configuration/BackendConfigurationManager.php index 8dcaac1a1ea6e2290a30807ea0bf747325aa7493..7a24fcf32d8a3f240c0f2d9314337a79d33fd0d4 100644 --- a/typo3/sysext/extbase/Classes/Configuration/BackendConfigurationManager.php +++ b/typo3/sysext/extbase/Classes/Configuration/BackendConfigurationManager.php @@ -215,29 +215,33 @@ class BackendConfigurationManager implements SingletonInterface $site = $request?->getAttribute('site'); $rootLine = []; + $sysTemplateFakeRow = [ + 'uid' => 0, + 'pid' => 0, + 'title' => 'Fake sys_template row to force extension statics loading', + 'root' => 1, + 'clear' => 3, + 'include_static_file' => '', + 'basedOn' => '', + 'includeStaticAfterBasedOn' => 0, + 'static_file_mode' => false, + 'constants' => '', + 'config' => '', + 'deleted' => 0, + 'hidden' => 0, + 'starttime' => 0, + 'endtime' => 0, + 'sorting' => 0, + ]; if ($pageId > 0) { $rootLine = GeneralUtility::makeInstance(RootlineUtility::class, $pageId)->get(); $sysTemplateRows = $this->sysTemplateRepository->getSysTemplateRowsByRootline($rootLine, $request); ksort($rootLine); - } else { - $sysTemplateRows[] = [ - 'uid' => 0, - 'pid' => 0, - 'title' => 'Fake sys_template row to force extension statics loading', - 'root' => 1, - 'clear' => 3, - 'include_static_file' => '', - 'basedOn' => '', - 'includeStaticAfterBasedOn' => 0, - 'static_file_mode' => false, - 'constants' => '', - 'config' => '', - 'deleted' => 0, - 'hidden' => 0, - 'starttime' => 0, - 'endtime' => 0, - 'sorting' => 0, - ]; + } + if (empty($sysTemplateRows)) { + // If there is no page (pid 0 only), or if the first 'is_siteroot' site has no sys_template record, + // then we "fake" a sys_template row: This triggers inclusion of 'global' and 'extension static' TypoScript. + $sysTemplateRows[] = $sysTemplateFakeRow; } // We do cache tree and tokens, but don't cache full ast in this backend context for now: diff --git a/typo3/sysext/form/Classes/Controller/AbstractBackendController.php b/typo3/sysext/form/Classes/Controller/AbstractBackendController.php index 8953c8be826959ba4a98bf1855761b117d668b45..cc771f62c0f717d74990d5c71ca189025242401d 100644 --- a/typo3/sysext/form/Classes/Controller/AbstractBackendController.php +++ b/typo3/sysext/form/Classes/Controller/AbstractBackendController.php @@ -41,8 +41,13 @@ abstract class AbstractBackendController extends ActionController public function initializeObject() { - $this->formSettings = GeneralUtility::makeInstance(ConfigurationManagerInterface::class) - ->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_YAML_SETTINGS, 'form'); + $configurationManager = GeneralUtility::makeInstance(ConfigurationManagerInterface::class); + $this->formSettings = $configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_YAML_SETTINGS, 'form'); + if (!isset($this->formSettings['formManager'])) { + // Config sub array formManager is crucial and should always exist. If it does + // not, this indicates an issue in config loading logic. Except in this case. + throw new \LogicException('Configuration could not be loaded', 1681549038); + } } /**