Laravel 在 null 上调用成员函数

Laravel call to member function on null

我花了最后一个小时谷歌搜索和阅读关于这个问题的堆栈帖子,但一直无法解决这个问题。我附加了一个 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;
        }

有什么解决方案吗?

我认为您试图在未登录的情况下访问 Auth::user()。如果您未登录并且无需使用 try 和 return null,它将变为 null捕获块。

错误不言自明。

Call to member function on null

如果你在 try 块中查看成员函数调用在 Auth::user() 之后的 if 条件中,它可以 return null 因为一些原因,比如你没有登录。

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

根据错误 $user 变量为空。试着弄清楚为什么 Auth::user() 是 returning null。

我认为你想多了。当简单的 if/else 语句可以处理时,无需执行 try/catch。

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

由于您检查用户是否使用 isset 登录,因此不会抛出任何错误,也无需尝试捕获错误。另外,除非您知道会抛出哪种错误,否则我只会在您的 catch 块上使用基本异常 class。因为除非异常类型匹配,否则它不会解决捕获问题。由于所有类型都继承自 Exception,因此您会看到第一个出现的类型。