在 extbase 控制器中写入 extConf

Writing to extConf in extbase controller

我有一个小的 extbase 扩展,可以更改我的颜色设置(例如 css、cookiebar 等),我还想更改后端插件按钮的颜色,在 backend sysext 在我的控制器中。

获取值:

$var = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']);
$var["loginHighlightColor"]="#444444";

但是现在,我该如何保存这个值呢? 尝试以下语句时,它正确设置了值,但没有持久化:

$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend'] = serialize($var);

即使尝试使用 PersistentManager 手动持久化也行不通。

这就是它在我的 AdditionalConfiguration.php 中的工作方式。也许你可以适应它:

$resourcePath = 'EXT:' . $extKey . '/Resources/Public/Images/';
$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend'] = serialize(
    [
        'loginLogo'            => $resourcePath . 'logo.svg',
        'loginHighlightColor'  => '#c0c0c0',
        'loginBackgroundImage' => $resourcePath . 'login-bg.svg',
    ]
);

您可能需要执行与此处相同的操作:

http://api.typo3.org/typo3cms/current/html/_configuration_controller_8php_source.html#l00156

由于该函数受到保护,您不能从您的代码中调用它。 您可以使用两个 public 函数:

public 函数 saveAction(array $config, $extensionKey)(第 109 行)

public 函数 saveAndCloseAction(array $config, $extensionKey)(第 131 行)

感谢Bernd Wilke 我明白了:

$var = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']);
$var["loginHighlightColor"]="#444444";

$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend'] = serialize($var);

$configurationUtility = $this->objectManager->get(\TYPO3\CMS\Extensionmanager\Utility\ConfigurationUtility::class);
$newConfiguration = $configurationUtility->getCurrentConfiguration("backend");
\TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($newConfiguration, $var);
$configurationUtility->writeConfiguration(
    $configurationUtility->convertValuedToNestedConfiguration($newConfiguration),
    "backend"
);