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() возвращает ноль.