>백엔드 개발 >PHP 튜토리얼 >Laravel 5.3报错:`빈 값에서 기본 객체 생성`

Laravel 5.3报错:`빈 값에서 기본 객체 생성`

WBOY
WBOY원래의
2016-10-11 14:23:431606검색

코드는 다음과 같습니다.

ActivationService.php

<code>    <?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);
            //下面这行是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();
        }
    
    }</code>

오류 메시지:

<code>    ErrorException in ActivationService.php line 53:
    Creating default object from empty value</code>

코드 53행에 주석이 있는데 코드는 $user->activated = true;입니다.

질문:
위 코드는 이 오류를 어떻게 해결합니까?

답글 내용:

코드는 다음과 같습니다.

ActivationService.php

<code>    <?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);
            //下面这行是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();
        }
    
    }</code>

오류 메시지:

<code>    ErrorException in ActivationService.php line 53:
    Creating default object from empty value</code>

코드 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행 아래에

을 추가하는 것입니다.
<code>if(!$user){
    return null;
}</code>

그러나 이 경우 한 줄씩 중단점을 지정하여 반환된 내용을 확인한 다음 문제를 찾을 수 있습니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.