2016-10-10 138 views
0

下面的代码有错误。我正在使用Laravel 5.3和php 7.0。Laravel 5.3错误:从空值创建默认对象

我谷歌它,但仍然不清楚,任何帮助将不胜感激。

ActivationService.php

<?php 

namespace App; 


use Illuminate\Mail\Mailer; 
use Illuminate\Mail\Message; 

class ActivationService 
{ 

    protected $mailer; 

    protected $activationRepo; 

    protected $resendAfter = 24; 

    public function __construct(Mailer $mailer, ActivationRepository $activationRepo) 
    { 
     $this->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 <a href="%s">%s</a>', $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); 
     //Below is line 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(); 
    } 

} 

错误消息

在ActivationService.php线53 ErrorException:创建缺省对象从空值

53的线上面的代码是这样的:

$user->activated = true; 

我该如何解决这个问题?

+2

'$ user = User :: find($ activation-> user_id);''可能返回'false'或'null'。你试过倾销'$ activation-> user_id'吗?你为什么不用'Auth :: user() - > id'来代替? – Mihailo

回答

1

的问题很可能是因为$user = User::find($activation->user_id);返回

当您在这些种情况最终总是试图倾销问题出在哪里发生了变化,在这种情况下dd($activation->user_id)

我建议使用Auth::user()->id代替。

相关问题