TYPO3 11依赖注入报错:AbstractRepository对象无法转为字符串
TYPO3 11依赖注入异常分析与解决
问题根源
异常的直接原因是注入方法中的赋值语句错误:
$this->$abstractRepository = $abstractRepository;
这里误用了PHP的变量变量语法,PHP会尝试将$abstractRepository对象转换为字符串,以此作为要赋值的属性名称,而AbstractRepository类没有实现__toString()方法,因此抛出"Object of class ... could not be converted to string"异常。
修正代码
将注入方法中的赋值语句改为直接引用类属性名(去掉属性名前的额外$):
class ModuleConfController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController { /** * @var \Aip\Bit3\Domain\Repository\AbstractRepository */ private ?AbstractRepository $abstractRepository = null; public function injectAbstractRepository(AbstractRepository $abstractRepository) { $this->abstractRepository = $abstractRepository; } }
补充说明
你的Services.yaml配置是正确的:
services: _defaults: autowire: true autoconfigure: true public: false Aip\Bit3\: resource: '../Classes/*' exclude: '../Classes/Domain/Model/*'
开启autowire: true后,TYPO3的依赖注入容器会自动识别inject{PropertyName}格式的方法,并完成实例注入,只要属性名称和注入方法的命名规范匹配,就能正常工作。
内容的提问来源于stack exchange,提问作者Ivano Luberti
相关产品推荐
相关产品推荐

