Laravel вызов функции-члена на нуль

Я потратил последний час, гугля и читая сообщения из стека по этой проблеме, но не смог решить эту проблему. Я приложил попытку поймать и заявление, и я все еще получаю 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 ответа

Решение

Я думаю, что вы над этим подумали. Нет необходимости делать 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, вы поймаете первый, который появится.

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

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

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

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

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

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

Другие вопросы по тегам