2016-10-10 131 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代替。

相關問題