TYPO3 8.7:frontenduserrepository的findByEmail函数返回null

时间:2019-01-31 15:46:25

标签: php typo3 typo3-8.x

在我的自定义扩展程序的module中,我试图更改fe_user的db值。实际上,我正在尝试更改电子邮件和用户名。 但是,当我使用给定的TYPO3 FrontendUserRepo时,函数findByEmail返回null。电子邮件$_POST['email']正确传递了,我也尝试对有效的电子邮件进行硬编码,但没有用。

在控制器中:

进口:

use TYPO3\CMS\Extbase\Domain\Model\FrontendUser;

注入FrontendUserRepo作为类的属性:

/**
 * @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
 * @inject
 */
protected $frontendUserRepository;

...

实际情况:

$frontendUser =  $this->frontendUserRepository->findByEmail($_POST['email_old']);
$frontendUser->setUsername($_POST['email']);
$frontendUser->setEmail($_POST['email']);

3 个答案:

答案 0 :(得分:2)

这很可能是因为尚未将storagePid设置为包含前端用户的文件夹。将扩展名的storagePid设置为具有前端用户的文件夹。可以使用module.tx_yourextension.persistence.storagePid = ...

在TypoScript中完成此操作

如果用户与扩展使用的其余记录位于不同的文件夹中,则可以将多个uid逗号分隔。如果创建新记录,则需要设置每种记录类型应保存的uid:

module.tx_yourextensions.persistence {
  storagePid = [uid1],[uid2]
  Vendor\YourExtension\Domain\Model\YourModel {
    newRecordStoragePid = [uid1]
  }
  TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
    newRecordStoragePid = [uid2]
  }
}

答案 1 :(得分:1)

此问题的可能解决方案可能是:

$querySettings = $this->FrontendUserRepository->createQuery()->getQuerySettings();
       // don't add the pid constraint
       $querySettings->setRespectStoragePage(FALSE);
       $this->FrontendUserRepository->setDefaultQuerySettings($querySettings);

在这种情况下,您不需要第二个存储pid

答案 2 :(得分:0)

设置属性后,需要保存对象。 这是一种方法:

$frontendUserRepository->update($frontendUser);