这是代码:
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
错误信息:
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
错误信息:
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;}
不过这类你可以断点一行行看返回是啥再去找问题