Eh bien, je dois faire quelque chose de syntaxiquement, je vais expliquer mon petit problème.
J'ai un auditeur symfony qui récupère l'email de l'utilisateur et doit mettre à jour une information de cet utilisateur. P>
Pour cela, je pensais que j'aurais obtenu l'utilisateur avec le référentiel, puis mettez à jour avec -Se ... () mais non ... J'ai cette erreur: p>
appel à une fonction de membre SetPassword () sur le tableau p>
Je comprends que le repo me renvoie un tableau, mais comment faire de cela pour que cela retourne l'entité modifiable? P>
Voici mon auditeur: P>
<?php namespace App\Events; use ApiPlatform\Core\EventListener\EventPriorities; use App\Entity\User; use App\Repository\UserRepository; use App\Entity\ForgotPassEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Event\ViewEvent; use Symfony\Component\Templating\EngineInterface; use Symfony\Component\HttpKernel\KernelEvents; use Twig\Environment; class ForgotPasswordSubscriber implements EventSubscriberInterface { public function __construct(\Swift_Mailer $mailer,Environment $environment,UserRepository $userRepository,EntityManagerInterface $em) { $this->mailer = $mailer; $this->twig = $environment; $this->userRepository = $userRepository; $this->em = $em; } public static function getSubscribedEvents() { return [ KernelEvents::VIEW => ['SendMail', EventPriorities::POST_WRITE], ]; } public function SendMail(ViewEvent $event): void { function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } $forgotPassHandler = $event->getControllerResult(); $method = $event->getRequest()->getMethod(); if (!$forgotPassHandler instanceof ForgotPassEvent || Request::METHOD_POST !== $method) { return; } $user = $this->userRepository->findBy(array('email'=>$forgotPassHandler->getUserEmail())); if($user == null){ return; } $generatePass = generateRandomString(); dump($generatePass); $user->setPassword($generatePass); $this->em->flush(); $message = (new \Swift_Message('Reset password OptaKPI')) ->setFrom('kpi@support.com') ->setTo($forgotPassHandler->getUserEmail()) ->setBody( $this->twig->render( // templates/emails/registration.html.twig 'emails/forgotPass.html.twig', [ 'userEmail' => $forgotPassHandler->getUserEmail(), 'generatePass' => $generatePass ] ), 'text/html' ); try { $this->mailer->send($message); } catch (\Swift_TransportException $e) { dump($e->getMessage()); } } }
3 Réponses :
Bonjour donc je suis nouveau et je me tromperais peut-être, mais je peux le voir est syntaxiquement tort que le repo n'est pas correctement connecté et que ne retournez pas avec les valeurs modifiées. P>
Encore une fois, je suis peut-être faux mais espère que cela ait aidé un peu p>
Le repo fonctionne, si je viderai $ utilisateur, il renvoie l'utilisateur que je recherche, mais comme tableau: /
Corrigez-moi si je me trompe, mais ce qui se passe là-bas, est-ce que votre passepassword s'attend à une chaîne.mais votre fonction GenerateDomstring (); renvoie probablement un tableau et non une chaîne. p>
Regardez à votre générateurAndomstring (); et assurez-vous de stocker une chaîne dans votre variable $ GeneratePass. p>
La fonction renvoie une chaîne ^^
Vous appelez FindBy CODE> Méthode qui renvoie une collection d'utilisateurs, mais vous devez
FINENEBY CODE> qui retournera un utilisateur P>