为了账号安全,请及时绑定邮箱和手机立即绑定

TYPO3:使用构造函数将服务类注入 AuthServiceClass

TYPO3:使用构造函数将服务类注入 AuthServiceClass

PHP
尚方宝剑之说 2022-07-29 16:14:39
我正在使用 TYPO3 10.2 并尝试将我创建的一些服务类注入到我的身份验证服务中。class AuthService extends \TYPO3\CMS\Core\Authentication\AuthenticationServiceAuthService 中的构造函数:    /**     * Contains the configuration of the current extension     * @var ConfigurationService     */    protected $configurationService;    /**     * @var RestClientService     */    protected $restClientService;    /**     * @var ConnectionPool     */    protected $connectionPool;    /**     *      * @param ConfigurationService $configurationService     * @param RestClientService $restClientService     * @param ConnectionPool $connectionPool     */    public function __construct(ConfigurationService $configurationService, RestClientService $restClientService, ConnectionPool $connectionPool)    {        $this->configurationService = $configurationService;        $this->restClientService = $restClientService;        $this->connectionPool = $connectionPool;    }我收到以下错误:函数 Vendor\MyExt\Service\AuthService::__construct() 的参数太少,第 3461 行的 C:\xampp\htdocs\myproject\typo3\sysext\core\Classes\Utility\GeneralUtility.php 中传递了 0,而预期为 3有什么建议吗?我在 ControllerClass 中使用了相同的构造函数,并且在那里一切正常。到目前为止感谢!
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

看起来您AuthenticationService的内部实例化为GeneralUtility::makeInstance(). 对于您在某些时候注册的许多类都是如此,然后 TYPO3 负责创建类(想想用户函数、插件控制器、模块控制器、身份验证服务、挂钩等)。


GeneralUtility::makeInstance()需要将类从 DI 容器中取出以使 DI 工作,但这仅适用于public在容器编译期间创建的类。


出于这个原因,您的问题的解决方案应该是AuthService在您的Configuration/Services.yaml:


services:

  _defaults:

    autowire: true

    autoconfigure: true

    public: false


  Vendor\MyExt\:

    resource: '../Classes/*'


  Vendor\MyExt\Service\AuthService:

    public: true

您可以在官方文档或我关于该主题的博客文章中找到解释。



查看完整回答
反对 回复 2022-07-29
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信