-1
votes

Appelez à une fonction de membre Mot de passe () sur tableau - Obtenez et mettez à jour l'entité doctrine

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());
        }

    }
}


0 commentaires

3 Réponses :


0
votes

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.

Encore une fois, je suis peut-être faux mais espère que cela ait aidé un peu


1 commentaires

Le repo fonctionne, si je viderai $ utilisateur, il renvoie l'utilisateur que je recherche, mais comme tableau: /



0
votes

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.

Regardez à votre générateurAndomstring (); et assurez-vous de stocker une chaîne dans votre variable $ GeneratePass.


1 commentaires

La fonction renvoie une chaîne ^^



1
votes

Vous appelez FindBy Méthode qui renvoie une collection d'utilisateurs, mais vous devez FINENEBY qui retournera un utilisateur


0 commentaires