如何在TYPO3 ActionController中获取常量编辑器设置的值?
在TYPO3 ActionController中获取扩展常量配置的正确方法
1. 修复ConfigurationManager为null的问题
$this->configurationManager为null,核心原因是未完成依赖注入。TYPO3 Extbase控制器不会自动实例化该对象,需通过以下方式注入:
属性注入(TYPO3 10+推荐)
在控制器类中添加注解注入代码:
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; use TYPO3\CMS\Extbase\Annotation\Inject; /** * @Inject * @var ConfigurationManagerInterface */ protected $configurationManager;
构造函数注入(符合PSR标准)
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; public function __construct(ConfigurationManagerInterface $configurationManager) { $this->configurationManager = $configurationManager; } // TYPO3 11+需添加此方法保证父类初始化逻辑执行 public function initializeObject() { parent::initializeObject(); }
2. 正确获取menu、search的常量配置
常量编辑器中定义的配置会被合并到扩展的setup配置中,不能直接读取常量文件,需通过ConfigurationManager获取合并后的settings:
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; // 获取当前扩展的完整配置 $extSettings = $this->configurationManager->getConfiguration( ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS, 'tx_yourextension', // 替换为你的扩展键名 'Pi1' // 插件类名,全局配置可留空 ); // 提取menu和search配置 $menuEnable = $extSettings['menu']['enable'] ?? false; $searchPlaceholder = $extSettings['search']['placeholder'] ?? '';
3. 检查TYPO3配置的基础关联
- 必须在
ext_typoscript_setup.typoscript中引用常量值,否则常量编辑器的配置不会生效到setup里:
# ext_typoscript_setup.typoscript plugin.tx_yourextension { settings { menu { enable = {$plugin.tx_yourextension.settings.menu.enable} maxItems = {$plugin.tx_yourextension.settings.menu.maxItems} } search { enable = {$plugin.tx_yourextension.settings.search.enable} placeholder = {$plugin.tx_yourextension.settings.search.placeholder} } } }
- 确认控制器继承自
TYPO3\CMS\Extbase\Mvc\Controller\ActionController,自定义基类需手动处理DI逻辑。
4. 解决仅backend配置生效的问题
之前的代码仅对backend值有效,说明你可能错误使用了CONFIGURATION_TYPE_FRAMEWORK配置类型,或者未指定正确的扩展/插件键名。必须使用CONFIGURATION_TYPE_SETTINGS来获取用户可配置的settings集合,而非框架内部的backend配置。
内容的提问来源于stack exchange,提问作者peni4142
相关产品推荐
相关产品推荐

