我在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
所以我的问题是:我错了什么?正确的方法是什么?
答案 0 :(得分:1)
Symfony命令与Extbase无关。因此,您不能使用任何DI。但是,您仍然可以获取ObjectManager
的实例,然后检索所需的任何对象:
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$exampleRepository = $objectManager->get(ExampleRepository::class);
如果一个类不依赖Extbase或其DI,则可以直接使用GeneralUtility::makeInstance()
获取一个实例。