Extbase:将存储库注入域模型
Extbase: inject repository into domain model
我目前正在使用 Typo3 6.2.10
和 Extbase。
我正在尝试将存储库注入我的域模型,如下所示:
class MyModel extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* @inject
* @var \Vendor\Package\Domain\Repository\SomeRepository
*/
protected $someRepository;
}
然而,$this->someRepository
总是 null
。不过,将存储库注入控制器始终有效。
提前致谢!
抱歉,我自己找到了解决方案。
我尝试使用 new
关键字实例化模型,但 (ofc) 不起作用。
我不得不改用 $this->objectManager->get('\Vendor\Package\Domain\Model\MyModel');
。
请记住,在使用 $this->objectManager->get(xxx); 时,您必须省略 class 名称中的第一个 \否则这一行将在 typo3 7.x+ 中抛出异常。
$this->objectManager->get('Vendor\Package\Domain\Model\MyModel');
反斜杠也是一个转义字符,所以转义反斜杠或者只使用 class
的静态常量更安全
逃脱:
$this->objectManager->get('Vendor\Package\Domain\Model\MyModel');
使用静态 class 名称:
$this->objectManager->get(\Vendor\Package\Domain\Model\MyModel::class);
我更喜欢用最后一种方法,因为你可以看到你是否打错了(取决于IDE)
我目前正在使用 Typo3 6.2.10
和 Extbase。
我正在尝试将存储库注入我的域模型,如下所示:
class MyModel extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* @inject
* @var \Vendor\Package\Domain\Repository\SomeRepository
*/
protected $someRepository;
}
然而,$this->someRepository
总是 null
。不过,将存储库注入控制器始终有效。
提前致谢!
抱歉,我自己找到了解决方案。
我尝试使用 new
关键字实例化模型,但 (ofc) 不起作用。
我不得不改用 $this->objectManager->get('\Vendor\Package\Domain\Model\MyModel');
。
请记住,在使用 $this->objectManager->get(xxx); 时,您必须省略 class 名称中的第一个 \否则这一行将在 typo3 7.x+ 中抛出异常。
$this->objectManager->get('Vendor\Package\Domain\Model\MyModel');
反斜杠也是一个转义字符,所以转义反斜杠或者只使用 class
的静态常量更安全逃脱:
$this->objectManager->get('Vendor\Package\Domain\Model\MyModel');
使用静态 class 名称:
$this->objectManager->get(\Vendor\Package\Domain\Model\MyModel::class);
我更喜欢用最后一种方法,因为你可以看到你是否打错了(取决于IDE)