You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3弃用#90803问题处理:ObjectManager::get替代使用方案咨询

TYPO3 替换ObjectManager::get获取自定义类实例的方法

推荐方案:构造函数依赖注入(即你提到的Service $service注入方式)

这是TYPO3官方首推的写法,无需手动创建实例,由DI容器自动完成依赖注入:

  • 首先确认你的自定义类HGA\Mairlist\Utilities\SqlSelect可被DI容器识别:
    若类没有特殊构造参数,默认无需额外配置。如果需要公开调用或者有自定义依赖,可在你扩展的Configuration/Services.yaml中添加如下配置:
    services:
      HGA\Mairlist\Utilities\SqlSelect:
        public: true
        # 若类有构造参数需要注入,在此处添加arguments配置即可
        # arguments:
        #   $customParam: '@Other\Service\Name'
    
  • 在你需要使用SqlSelect的类(如控制器、自定义服务等)中通过构造函数注入:
    <?php
    use HGA\Mairlist\Utilities\SqlSelect;
    
    class YourBusinessService
    {
        protected SqlSelect $sqlSelect;
    
        // 直接声明类型参数,DI容器会自动注入对应实例
        public function __construct(SqlSelect $sqlSelect)
        {
            $this->sqlSelect = $sqlSelect;
        }
    
        public function yourBusinessMethod()
        {
            // 直接调用即可,和原有调用效果完全一致
            $setup = $this->sqlSelect->getUid("cr", "lastplay", 3);
        }
    }
    

兼容方案:不支持注入场景的替代写法

如果你的代码场景无法使用构造函数注入(例如静态工具类、未纳入DI管理的老旧代码),可以直接通过GeneralUtility::makeInstance获取实例,完全替代原有ObjectManager中转的逻辑:

<?php
// 无需再通过ObjectManager中转,直接获取自定义类实例
$sqlSel = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\HGA\Mairlist\Utilities\SqlSelect::class);
$setup = $sqlSel->getUid("cr", "lastplay", 3);

内容的提问来源于stack exchange,提问作者Georgio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:30:04