Ну, должно быть, я делаю что-то синтаксически неправильно, объясню свою маленькую проблему.
У меня есть слушатель symfony, который получает электронную почту пользователя и должен обновлять информацию об этом пользователе.
Для этого я подумал, что получу пользователя с репозиторием, а затем обновлю его с помощью -set ... () Но нет ... У меня такая ошибка:
Вызов функция-член setPassword () в массиве
Я понимаю, что репо возвращает мне массив, но как тогда заставить его вернуть изменяемую сущность?
Вот мой слушатель:
<?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());
}
}
}
Должно быть, я чего-то упускаю ... Но, признаюсь, я не справляюсь с symfony очень хорошо ...
Спасибо вы!
PS: Извините за мой английский sh ^^ '