TYPO3:带参数和依赖注入的Symfony命令

问题描述 投票:1回答:1

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

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

php symfony typo3 extbase
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.