我在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命令与Extbase无关。所以你不能使用任何DI。但是,您仍然可以获得ObjectManager
的实例,然后检索您需要的任何对象:
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$exampleRepository = $objectManager->get(ExampleRepository::class);
如果一个类不依赖于Extbase或它的DI,你可以直接用GeneralUtility::makeInstance()
获取一个实例。