问题
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