【问题标题】:TYPO3: Symfony command with arguments AND dependency injectionTYPO3:带有参数和依赖注入的 Symfony 命令
【发布时间】:2019-04-03 07:53:33
【问题描述】:

我在 TYPO3 中创建了一个带有参数和依赖注入 (DI) 的命令。 正如我在 symfony 中所理解的,DI 是使用 __construct 方法制作的。但是在那里我还必须说明我想传递给命令的参数。那么它是如何正确完成的呢?

来源:

版本: TYPO3 9.5.5、symfony 4.2.5

假设我想将一个参数传递给命令并从 TYPO3 注入 ObjectManager:

<?php

namespace Vendor\ExtensionName\Command;

use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
use Symfony\Component\Console\Command\Command;

class SomeCommand extends Command 
{

    /**
     * Object Manager
     *
     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
     */
    protected $objectManager;

    /**
     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
     */
    public function __construct(
        string $cliParameter,
        \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager) 
    {
        $this->cliParameter = $cliParameter;
        $this->objectManager = $objectManager;
    }
}

然后我用

调用它
bin/typo3 extension_name:someCommand foo

(其中foo$cliParameter

我明白了

Uncaught TYPO3 Exception Cannot instantiate interface TYPO3\CMS\Extbase\Object\ObjectManagerInterface

所以我的问题是:我做错了什么?这样做的正确方法是什么?

【问题讨论】:

  • 什么是 symfony 版本?
  • 您是否尝试过注入 ObjectManager 而不是 ObjectManagerInterface? (是的,不赞成依赖特定的实现,但也许typo3 DI不够聪明......?)

标签: php symfony typo3 extbase


【解决方案1】:

Symfony 命令与 Extbase 无关。所以你不能使用 DI before TYPO3v10。但是,您仍然可以为自己获取一个 ObjectManager 的实例,然后检索您需要的任何对象:

$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$exampleRepository = $objectManager->get(ExampleRepository::class);

如果一个类不依赖Extbase或其DI,你可以直接用GeneralUtility::makeInstance()获取实例。

请注意,使用 TYPO3v10 或更新版本,您可以改为 use the native TYPO3 DI for commands

【讨论】:

  • 现在 ObjectManager::get 已被弃用。我正在寻找一种将我的存储库注入控制台命令的方法,但我不知道如何。
  • 是的,我也想知道这个
  • 有人找到解决方案如何将存储库注入控制台命令?
  • 从 TYPO3 版本 10.3 开始,您可以通过在 Services.yaml 配置中定义命令来在 symfony 命令中使用 DI,如 here 所述。更改 Services.yaml 文件后不要忘记在安装工具中刷新缓存。
  • 谢谢@ChristianFries,我刚刚合并了这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多