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>