如何在构造函数中使用注入的对象?
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()
。它将在依赖注入完成后被调用。
我的 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()
。它将在依赖注入完成后被调用。