Laravel вызов функции-члена на нуль - PullRequest
0 голосов
/ 18 января 2019

Последний час я потратил на поиск и поиск сообщений в стеке по этой проблеме, но не смог решить эту проблему. Я приложил команду try catch и if, и все еще получаю call to member function on null error. Вот мой код

 try{
            $user = Auth::user();
            if(null !== ($user->wasStripePlan())){
                $data['allSubscriptions'] = (Auth::user()->wasStripePlan()) ? Auth::user()->subscriptions : [];
            }
        }catch (\PDOException $e){
            $data['allSubscriptions'] = false;
        }

Есть идеи по решениям?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Я думаю, что вы обдумали это. Нет необходимости делать try / catch, когда простые операторы if / else могут с этим справиться.

if(isset(Auth::user()){
    $data['allSubscriptions'] = $data['allSubscriptions'] = (Auth::user()->wasStripePlan()) ? Auth::user()->subscriptions : [];
}else{
    $data['allSbuscriptions'] = false;
}

Поскольку вы проверяете, вошел ли пользователь в систему с помощью isset, не будет ли выдано никаких ошибок и нет необходимости пытаться их перехватить. Также, если вы не знаете, какая ошибка будет выдана, я бы просто использовал базовый класс Exception в вашем блоке catch. Так как это не разрешит ловушку, если тип исключения не соответствует. Поскольку все типы наследуются от Exception, вы поймаете первый, который появится.

0 голосов
/ 18 января 2019

Я думаю, что вы пытаетесь получить доступ к Auth :: user () без входа в систему. Он вернет null, если вы не вошли в систему и нет необходимости использовать блок try и catch.

Ошибка не требует пояснений.

Вызов функции-члена в null

если вы загляните внутрь, то вызов функции-члена блока try находится в условии if после Auth :: user (), которое может возвращать null по нескольким причинам, например, из-за того, что вы не вошли в систему.

if(null !== ($user->wasStripePlan()))

В соответствии с ошибкой $ user переменная равна нулю. Попробуйте выяснить, почему Auth :: user () возвращает ноль.

...