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

TYPO3读取数据库单条记录时构造函数参数注入报错求助

解决TYPO3控制器构造函数注入ConnectionPool报错的方案

报错原因

当前控制器的构造函数依赖注入未被TYPO3的依赖注入容器正确处理,导致实例化时无法传入ConnectionPool对象。

具体解决方法

方法1:通过GeneralUtility手动获取(兼容所有TYPO3版本)

删除控制器中的构造函数,在initializeAction中初始化connectionPool:

private ConnectionPool $connectionPool;
private const TABLE_NAME = 'tx_avvcard_domain_model_vcard';

protected function initializeAction()
{
    $this->connectionPool = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(ConnectionPool::class);
}

// 移除原有的__construct方法

方法2:配置依赖注入(TYPO3 v10.4+ 推荐)

在扩展的Configuration/Services.yaml文件中添加控制器的依赖配置:

services:
  Averlon\AvVcard\Controller\VcardController:
    arguments:
      $connectionPool: '@TYPO3\CMS\Core\Database\ConnectionPool'

保存后清除TYPO3缓存,依赖注入容器会自动注入ConnectionPool实例。

方法3:使用属性注入注解(TYPO3 v11+)

删除构造函数,直接在属性上添加注入注解:

use TYPO3\CMS\Core\DependencyInjection\Attribute\Inject;

#[Inject]
private ConnectionPool $connectionPool;
private const TABLE_NAME = 'tx_avvcard_domain_model_vcard';

// 移除原有的__construct方法

额外优化建议

  • 代码中iconAction的注释包含@param \Averlon\AvVcard\Domain\Model\Vcard $vcard,但方法签名无此参数,建议删除该注释避免混淆。
  • 读取到记录后,可通过$this->view->assign('vcardRecord', $xxRecord)将变量传递给Fluid模板,即可在模板中通过{vcardRecord}调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:20:28