TYPO3 8.7:frontenduserrepository 的 findByEmail 函数 returns null
TYPO3 8.7: findByEmail function of frontenduserrepository returns null
在我的自定义扩展 module
中,我试图更改 fe_user
的数据库值。事实上,我正在尝试更改电子邮件和用户名。
但是当我使用给定的 TYPO3 FrontendUserRepo 函数 findByEmail
returns null
时。电子邮件 $_POST['email']
已正确传递,我也尝试对有效电子邮件进行硬编码,但没有成功。
在控制器中:
进口:
use TYPO3\CMS\Extbase\Domain\Model\FrontendUser;
注入 FrontendUserRepo
作为 class 的属性:
/**
* @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']);
您需要在设置属性后保存对象。
这是一种方法:
$frontendUserRepository->update($frontendUser);
这很可能是因为storagePid 没有设置到前端用户所在的文件夹。将扩展的 storagePid 设置为前端用户所在的文件夹。这可以在 TypoScript 中使用:module.tx_yourextension.persistence.storagePid = ...
如果您的用户与扩展程序使用的其余记录位于不同的文件夹中,您可以设置多个 uid 以逗号分隔。如果您创建新记录,则需要设置应保存每种记录类型的 uid:
module.tx_yourextensions.persistence {
storagePid = [uid1],[uid2]
Vendor\YourExtension\Domain\Model\YourModel {
newRecordStoragePid = [uid1]
}
TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
newRecordStoragePid = [uid2]
}
}
此问题的可能解决方案是:
$querySettings = $this->FrontendUserRepository->createQuery()->getQuerySettings();
// don't add the pid constraint
$querySettings->setRespectStoragePage(FALSE);
$this->FrontendUserRepository->setDefaultQuerySettings($querySettings);
在这种情况下,您不需要第二个存储 pid
在我的自定义扩展 module
中,我试图更改 fe_user
的数据库值。事实上,我正在尝试更改电子邮件和用户名。
但是当我使用给定的 TYPO3 FrontendUserRepo 函数 findByEmail
returns null
时。电子邮件 $_POST['email']
已正确传递,我也尝试对有效电子邮件进行硬编码,但没有成功。
在控制器中:
进口:
use TYPO3\CMS\Extbase\Domain\Model\FrontendUser;
注入 FrontendUserRepo
作为 class 的属性:
/**
* @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']);
您需要在设置属性后保存对象。 这是一种方法:
$frontendUserRepository->update($frontendUser);
这很可能是因为storagePid 没有设置到前端用户所在的文件夹。将扩展的 storagePid 设置为前端用户所在的文件夹。这可以在 TypoScript 中使用:module.tx_yourextension.persistence.storagePid = ...
如果您的用户与扩展程序使用的其余记录位于不同的文件夹中,您可以设置多个 uid 以逗号分隔。如果您创建新记录,则需要设置应保存每种记录类型的 uid:
module.tx_yourextensions.persistence {
storagePid = [uid1],[uid2]
Vendor\YourExtension\Domain\Model\YourModel {
newRecordStoragePid = [uid1]
}
TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
newRecordStoragePid = [uid2]
}
}
此问题的可能解决方案是:
$querySettings = $this->FrontendUserRepository->createQuery()->getQuerySettings();
// don't add the pid constraint
$querySettings->setRespectStoragePage(FALSE);
$this->FrontendUserRepository->setDefaultQuerySettings($querySettings);
在这种情况下,您不需要第二个存储 pid