我需要将用户从其他应用程序迁移到TYPO3,但无法设置新用户的用户组。更新现有用户并添加组作品。
这是我的代码。
/**
* @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
*/
protected $userRepository;
/**
* @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserGroupRepository
*/
protected $userGroupRepository;
/**
* @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
*/
protected $persistenceManager;
...
$this->userGroup = $this->userGroupRepository->findOneByTitle('My desired group');
$this->userGroupStorage = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
$this->userGroupStorage->attach($this->userGroup);
$user = $this->userRepository->findOneByForeignId($id);
if ($user) {
$this->updateUserData($user);
$this->userRepository->update($user);
} else {
$user = new \TYPO3\CMS\Extbase\Domain\Model\FrontendUser();
$this->updateUserData($user);
$this->userRepository->add($user);
}
$this->persistenceManager->persistAll();
...
private function updateUserData($user)
{
$user->setPid($this->pid);
$user->setFirstName($this->firstName);
...
// I use either this or the other line, not both at the same time!
// works on new and existing users but never gets persisted
$user->setUsergroup($this->userGroupStorage);
// throws error on new user but gets persisted on existing users
$user->addUsergroup($this->userGroup);
}
为什么 UserGroupStorage 没有存储在数据库中?我的解决方法是创建用户持久化它,从数据库重新加载它并添加用户组。但这不是好的做法。