时间:2021-07-01 10:21:17 帮助过:6人阅读
ActivationService.php
mailer = $mailer;
$this->activationRepo = $activationRepo;
}
public function sendActivationMail($user)
{
if ($user->activated || !$this->shouldSend($user)) {
return;
}
$token = $this->activationRepo->createActivation($user);
$link = route('user.activate', $token);
$message = sprintf('Activate account %s', $link, $link);
$this->mailer->raw($message, function (Message $m) use ($user) {
$m->to($user->email)->subject('Activation mail');
});
}
public function activateUser($token)
{
$activation = $this->activationRepo->getActivationByToken($token);
if ($activation === null) {
return null;
}
$user = User::find($activation->user_id);
//下面这行是53行.
$user->activated = true;
$user->save();
$this->activationRepo->deleteActivation($token);
return $user;
}
private function shouldSend($user)
{
$activation = $this->activationRepo->getActivation($user);
return $activation === null || strtotime($activation->created_at) + 60 * 60 * $this->resendAfter < time();
}
}
错误信息:
ErrorException in ActivationService.php line 53:
Creating default object from empty value
53行的位置在代码中有注释,代码是$user->activated = true;
问题:
上面的代码如何解决这个错误?
这是代码:
ActivationService.php
mailer = $mailer;
$this->activationRepo = $activationRepo;
}
public function sendActivationMail($user)
{
if ($user->activated || !$this->shouldSend($user)) {
return;
}
$token = $this->activationRepo->createActivation($user);
$link = route('user.activate', $token);
$message = sprintf('Activate account %s', $link, $link);
$this->mailer->raw($message, function (Message $m) use ($user) {
$m->to($user->email)->subject('Activation mail');
});
}
public function activateUser($token)
{
$activation = $this->activationRepo->getActivationByToken($token);
if ($activation === null) {
return null;
}
$user = User::find($activation->user_id);
//下面这行是53行.
$user->activated = true;
$user->save();
$this->activationRepo->deleteActivation($token);
return $user;
}
private function shouldSend($user)
{
$activation = $this->activationRepo->getActivation($user);
return $activation === null || strtotime($activation->created_at) + 60 * 60 * $this->resendAfter < time();
}
}
错误信息:
ErrorException in ActivationService.php line 53:
Creating default object from empty value
53行的位置在代码中有注释,代码是$user->activated = true;
问题:
上面的代码如何解决这个错误?
因为$activation = $this->activationRepo->getActivationByToken($token);
是你通过别的拿到的一个不为null的返回$activation->user_id
可能,也可能没值。
然后$user = User::find($activation->user_id);
的时候没值,返回的是null
,然后你53行$user->activated = true;
就给一个空去指对象了。。。所以。。最简单你就是52行下面增加
if(!$user){
return null;
}
不过这类你可以断点一行行看返回是啥再去找问题