TYPO3:具有参数和依赖项注入的Symfony命令

时间:2019-04-03 07:53:33

标签: php symfony typo3 extbase

我在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

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

1 个答案:

答案 0 :(得分:1)

Symfony命令与Extbase无关。因此,您不能使用任何DI。但是,您仍然可以获取ObjectManager的实例,然后检索所需的任何对象:

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

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