【问题标题】:TYPO3 DependencyInjection Services.yamlTYPO3 依赖注入服务.yaml
【发布时间】:2021-10-11 08:20:30
【问题描述】:

我从 TYPO3 V10.4 切换到 V11.5,不得不更换 objectManager->get。 为此我已经打开了TYPO3 Problem to handle Deprecation #90803

由于我有不止一个objectManager->get要替换,所以我不得不扩展Service.yaml示例来

# Configuration/Services.yaml
services:
  _defaults:
    autowire: true
    autoconfigure: true
    public: false

HGA\Mairlist\:
  resource: '../Classes/*'
  exclude: '../Classes/Domain/Model/*'

HGA\Mairlist\Utilities\SqlSelect:
  public: true
  
HGA\Mairlist\Utilities\SqlUtility:
  public: true

我不明白错误信息,我也对/\Services.yaml 感到困惑。

我的Services.yaml 文件有问题吗?

这里是controller文件的部分

    **
    * @var SqlUtility $sqlUtil
    */
    protected $sqlUtil;

    public function __construct(SqlUtility $sqlUtil)
    {
      $this->sqlUtil = $sqlUtil;
    }
   /**
    * @var SqlSelect $sqlSel
    */
    protected $sqlSel;

    public function __construct(SqlSelect $sqlSel)
    {
      $this->sqlSel = $sqlSel;
    }

解决方案:

Services.yaml 中,我所有以HGA\ 开头的代码都必须与_default 处于同一级别。这意味着,它必须再缩进一步(2 个空格)。

# Configuration/Services.yaml
services:
  _defaults:
    autowire: true
    autoconfigure: true
    public: false

  HGA\Mairlist\:
    resource: '../Classes/*'
    exclude: '../Classes/Domain/Model/*'

  HGA\Mairlist\Utilities\SqlSelect:
    public: true
  
  HGA\Mairlist\Utilities\SqlUtility:
    public: true

【问题讨论】:

  • 您是否处于作曲模式?此外,您只需要一个构造函数。 ;)
  • 不,我不是作曲家制作的。你的意思是只需要一个构造函数?有两个不同的变量。
  • 让我编辑您的问题并按照我向您展示的方式尝试
  • 好的,我在等,还是我必须做点什么?
  • @AristeidisKaravas:对原始帖子进行编辑作为答案。即使没有完整的答案。之后可以增强。

标签: typo3 extbase


【解决方案1】:

首先必须更改构造函数。如果你有多个注入,你可以在构造函数的参数中定义它们。在你的情况下,它看起来像这样:

use HGA/Mairlist/Utilities/SqlUtil

class yourClass {
   **
   * @var SqlUtil $sqlUtil
   */
   protected $sqlUtil;

   **
   * @var SqlSelect $sqlSel
   */
   protected $sqlUtil;

   public function __construct(
     SqlUtil $sqlUtil,
     SqlSelect $sqlSel
   ) {
     $this->sqlUtil = $sqlUtil;
     $this->sqlSel = $sqlSel;
   }
 }

先试试这个,如果问题仍然存在,告诉我们。

(顺便说一句,我在原帖中的编辑从现在开始等待批准)

【讨论】:

  • Aristeiidis,抱歉,我今天早上才看到您的批准请求。
  • 我进行了更改,但错误消息仍然相同。错误消息中的/\servives,yaml 是站立的,这是可以的还是错误的?我还有一个理解问题:@var SqlUtil $sqlUtilSqlUtil 是类名?
  • use 只能使用 SqlUtil 这样的类名,前提是你有一个 use 语句。 (在你的类之上应该有一个use HGA/Mairlist/Utilities/SqlUtil) 否则你应该把整个命名空间放在@var
  • 包含使用声明。类名是SqlUtilitySqlSelect。我已经在上面的代码部分更正了它。
【解决方案2】:

你的类中是否包含命名空间?消息说没有找到命名空间“HGA\Mairlist”。在您的控制器中,您需要

<?php
namespace HGA\Mairlist\Controller;

use HGA\Mairlist\Utilities\SqlUtility;
use HGA\Mairlist\Utilities\SqlSelect;

class yourClass
{
    **
     * @var SqlUtil $sqlUtil
     */
    protected $sqlUtil;

    **
     * @var SqlSelect $sqlSel
    */
    protected $sqlUtil;

    public function __construct(SqlUtil $sqlUtil,SqlSelect $sqlSel) 
    {
        $this->sqlUtil = $sqlUtil;
        $this->sqlSel = $sqlSel;
    }
 }

然后在安装工具中,您必须更新 Autoloaddump,因为您不在作曲家模式下。

INSTALL TOOL - Dump Autoload Information

【讨论】:

  • 是的,包括命名空间。也是使用,但是文件夹Utilities在Controller下,但我认为没关系。在 Tools->Maintenance 下,我使用了Rebuild PHP Autoload Information,并且我还卸载并重新安装了扩展。重新安装后,弹出错误消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多