如何在构造函数中使用注入的对象?

How can I use an injected object in the constructor?

我的 Extbase 扩展中有一个服务 class,我想使用 ObjectManager 在构造函数中创建一个对象的实例。

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

public function __construct() {
    $this->standaloneView = $this->objectManager->get('TYPO3\CMS\Fluid\View\StandaloneView');
    $this->standaloneView->setFormat('html');
}

不幸的是,这并没有因错误 Call to a member function get() on null 而失败,因为注入的 class 似乎在构造函数中不可用。如何在构造函数中使用注入的 class?

为此,我可以使用所谓的构造函数注入。 ObjectManagerInterface 被定义为构造函数的参数,然后由 Extbase 自动注入:

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

public function __construct(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager) {
    $this->objectManager = $objectManager;
    $this->standaloneView = $this->objectManager->get('TYPO3\CMS\Fluid\View\StandaloneView');
    $this->standaloneView->setFormat('html');
}

作为洛伦兹答案的替代方法,您可以使用生命周期方法 initializeObject()。它将在依赖注入完成后被调用。