TYPO3 8.7: функция findByEmail репозитория frontenduserrepository возвращает null

В моем module моего пользовательского расширения я пытаюсь изменить значение db для 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']);

person dombg    schedule 31.01.2019    source источник


Ответы (3)


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

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

в этом случае вам не нужен второй идентификатор хранилища

person Felix    schedule 01.02.2019

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

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

module.tx_yourextensions.persistence {
  storagePid = [uid1],[uid2]
  Vendor\YourExtension\Domain\Model\YourModel {
    newRecordStoragePid = [uid1]
  }
  TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
    newRecordStoragePid = [uid2]
  }
}
person Rudy Gnodde    schedule 01.02.2019
comment
Спасибо за Ваш ответ. Когда я устанавливаю storagePid, как вы предложили, остальная часть моего модуля ломается. Конечно, я использовал module.tx_yourextension.persistence.storagePid = вместо plugin.txyourext..... - person dombg; 01.02.2019
comment
Я отредактировал свой ответ, включив в него информацию о нескольких папках хранилища. - person Rudy Gnodde; 01.02.2019
comment
Спасибо за помощь. - person dombg; 01.02.2019

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

$frontendUserRepository->update($frontendUser);
person StatiX    schedule 31.01.2019
comment
Спасибо за ответ, но вы вообще читали мой вопрос? У меня нет объекта, потому что метод, который должен возвращать его, вместо этого возвращает null. - person dombg; 01.02.2019