好吧,我一定是做了什么语法上的错误,我来解释一下我的小问题。
我有一个symfony监听器,可以获取用户的电子邮件,并且必须更新这个用户的信息。
为此,我想我应该用仓库获取用户,然后用-set...()更新,但没有.... 我犯了这个错误。
在数组上调用成员函数setPassword()
我知道repo会返回一个数组给我,但是如何让它返回可修改的实体呢?
这是我的监听器。
<?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('[email protected]')
->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 : 对不起,我的英语不好 ^^'
你调用 findBy
方法,返回一个用户集合,但你需要用 findOneBy
将返回一个用户
你好,所以我是新来的,我可能错了,但我可以看到它是语法上的错误,因为repo没有正确连接,因此没有返回与修改的值。
同样,我也许错了,但希望这对你有帮助。
如果我错了,请纠正我,但那里发生的事情,是你的setPassword期望一个字符串.但你的函数generateRandomString();可能是返回一个数组,而不是一个字符串.看看你的generateRandomString();并确保你在你的$generatePass变量中存储一个字符串。
看一下你的 generateRandomString(); 并确保你在$generatePass 变量中存储了一个字符串。