1
votes

TYPO3 8.7: la fonction findByEmail du référentiel frontendu renvoie null

Dans mon module de mon extension personnalisée, j'essaye de changer la valeur de base de données d'un fe_user . En fait j'essaye de changer l'email et le nom d'utilisateur. Mais lorsque j'utilise le TYPO3 FrontendUserRepo donné, la fonction findByEmail renvoie null . L'e-mail $ _POST ['email'] est passé correctement et j'ai également essayé de coder en dur un e-mail valide, cela n'a pas fonctionné.

Dans Controller:

Importations:

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

Injection de FrontendUserRepo comme attribut de classe:

XXX

...

En action:

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


0 commentaires

3 Réponses :


0
votes

Vous devez enregistrer l'objet après avoir défini l'attribut. Voici une façon de procéder:

$frontendUserRepository->update($frontendUser);


1 commentaires

Merci pour votre réponse mais avez-vous même lu ma question? Je n'ai pas d'objet car la méthode qui devrait en renvoyer un renvoie null à la place.



2
votes

Ceci est probablement dû au fait que storagePid n'a pas été défini sur le dossier avec les utilisateurs frontend. Définissez le storagePid de votre extension dans le dossier avec les utilisateurs frontaux. Cela peut être fait dans TypoScript en utilisant: module.tx_yourextension.persistence.storagePid = ...

Si vos utilisateurs sont dans un dossier différent du reste des enregistrements utilisés par les extensions, vous pouvez définir plusieurs uids séparés par des virgules. Si vous créez de nouveaux enregistrements, vous devrez définir quel uid chaque type d'enregistrement doit être enregistré:

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


3 commentaires

Merci pour votre réponse. Lorsque j'ai défini le storagePid comme vous l'avez suggéré, le reste de mon module est interrompu. Bien sûr, j'ai utilisé module .tx_yourextension.persistence.storagePid = au lieu de plugin .txyourext .....


J'ai modifié ma réponse pour inclure des informations sur plusieurs dossiers de stockage.


Merci de votre aide.



1
votes

Une solution possible à ce problème pourrait être:

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

dans ce cas, vous n'avez pas besoin d'un deuxième pid de stockage


0 commentaires