How can I use an injected object in the constructor?

隐身守侯 提交于 2019-12-08 00:10:59

问题


I have a service class in my Extbase extension and want to use the ObjectManager to create an instance of an object in the constructor.

/**
 * @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');
}

Unfortunately this doesn't fails with an error Call to a member function get() on null because the injected class doesn't seem to be available in the constructor. How can I use an injected class in the constructur?


回答1:


To achieve this, I can use so-called constructor injection. The ObjectManagerInterface is defined as an argument of the constructor and then automatically injected by 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');
}



回答2:


As an alternative to lorenz answer, you could use the lifecycle-method initializeObject(). It will be called after dependency injection has been done.



来源:https://stackoverflow.com/questions/29915782/how-can-i-use-an-injected-object-in-the-constructor

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!