TYPO3 8.7:前端用户存储库的findByEmail函数返回空值



在我对自定义扩展的module中,我正在尝试更改fe_user的db值。实际上,我正在尝试更改电子邮件和用户名。但是当我使用给定的 TYPO3 前端用户存储库时,函数findByEmail返回null 。电子邮件$_POST['email']正确传递,我也尝试硬编码有效的电子邮件,但它不起作用。

在控制器中:

进口:

use TYPO3CMSExtbaseDomainModelFrontendUser;

注入FrontendUserRepo作为类的属性:

/**
 * @var TYPO3CMSExtbaseDomainRepositoryFrontendUserRepository
 * @inject
 */
protected $frontendUserRepository;

在行动中:

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

这很可能是因为 storagePid 尚未设置为前端用户的文件夹。将扩展的 storagePid 设置为包含前端用户的文件夹。这可以在TypoScript中使用来完成: module.tx_yourextension.persistence.storagePid = ...

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

module.tx_yourextensions.persistence {
  storagePid = [uid1],[uid2]
  VendorYourExtensionDomainModelYourModel {
    newRecordStoragePid = [uid1]
  }
  TYPO3CMSExtbaseDomainModelFrontendUser {
    newRecordStoragePid = [uid2]
  }
}

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

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

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

您需要在

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

$frontendUserRepository->update($frontendUser);

最新更新