我尝试以下列方式为TYPO3的前端用户组实例化核心存储库:
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
$feGroupRepo = $objectManager->create('\\TYPO3\\CMS\\Extbase\\Domain\\Repository\\FrontendUserGroupRepository');
var_dump($feGroupRepo->findAll()->toArray());
结果我得到了sql错误:
#1247602160: Table 'tablename.tx_extbase_domain_model_frontendusergroup' doesn't exist
为什么这个repo使用了错误的表?如何以正确的方式配置它以使用系统表'fe_groups'?
答案 0 :(得分:1)
您使用的TYPO3版本是什么? Normaly应该有extbase包含的typoscript,告诉自己不要查看与命名空间和类名匹配的表,而不是fe_groups。它应该是这样的:
config.tx_extbase {
persistence{
classes {
TYPO3\CMS\Extbase\Domain\Model\FrontendUserGroup {
mapping {
tableName = fe_groups
columns {
lockToDomain.mapOnProperty = lockToDomain
}
}
}
}
}
}
如果由于某种原因不存在,请将其自行包含在TypoScript中。
请不要使用dprecated方法$objectManager->create()
,但请始终使用$objectManager->get()
。
答案 1 :(得分:0)
尝试做丹尼尔所说的:
->create(
替换为->get(
config.tx_extbase.persistence.classes.TYPO3\CMS\Extbase\Domain\Model\FrontendUserGroup.mapping.tableName
的TypoScript对象浏览器设置部分,应该等于fe_groups
。它应该是pressent,否则添加它 - 但它应该在那里!稍微多一点,删除TYPO3
前面的双反斜杠。这可能是TYPO3无法检测到正确的TypoScript路径的原因:
$feGroupRepo = $objectManager->get('TYPO3\\CMS\\Extbase\\Domain\\Repository\\FrontendUserGroupRepository');
之后,清除整个缓存(最终删除typo3temp文件夹中的所有文件,有时需要删除它。)
答案 2 :(得分:0)
而不是$objectManager->create('etcetera')
,请尝试$objectManager->get('etcetera')
。如果您想要更长时间的讨论和更多想法,请查看已接受的答案here。