TYPO3 8.7: функция findByEmail в frontenduserrepository возвращает ноль - PullRequest
0 голосов
/ 31 января 2019

В моем module моего собственного Расширения я пытаюсь изменить значение в дБ на fe_user.На самом деле я пытаюсь изменить адрес электронной почты и имя пользователя.Но когда я использую данный 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 голосов
/ 01 февраля 2019

Скорее всего, это потому, что storagePid не был установлен в папку с внешними пользователями.Установите параметр storagePid для вашего расширения в папку с внешними пользователями.Это можно сделать в TypoScript, используя: module.tx_yourextension.persistence.storagePid = ...

Если ваши пользователи находятся в другой папке, чем остальные записи, используемые расширениями, вы можете установить несколько разделенных запятыми идентификаторов пользователей.Если вы создаете новые записи, вам необходимо указать, какой uid должен быть сохранен для каждого типа записи:

module.tx_yourextensions.persistence {
  storagePid = [uid1],[uid2]
  Vendor\YourExtension\Domain\Model\YourModel {
    newRecordStoragePid = [uid1]
  }
  TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
    newRecordStoragePid = [uid2]
  }
}
0 голосов
/ 01 февраля 2019

Возможное решение для этой проблемы может быть:

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

, в этом случае вам не нужен второй pid хранилища

0 голосов
/ 31 января 2019

Вам необходимо сохранить объект после установки атрибута.Вот способ сделать это:

$frontendUserRepository->update($frontendUser);
...