Laravel-在null上调用一个方法;如果为null,则返回false


Laravel - Calling a method on null & returning false if null

我用laravel设置了ACL。我有以下助手:

function user($user_id = null)
{
    if (!$user_id) return Auth::user();
    return User::where('id', $user_id)->first();
}

我有这个助手函数,所以我不必键入长的Auth::user()

问题来了。我已经设置了ACL,所以当我在模型中执行以下操作时,用户没有登录,我会收到一个错误。

if (user()->can('edit-blog')) {
   echo 'you can edit blog!';
}

如果用户没有登录,这就是错误:

在空上调用成员函数can()

现在,我的网站上到处都是下面的代码。我在几乎每个视图、模型和控制器中都使用ACL。我不想为了不出错而不得不做下面这样的事情。

if (user() && user()->can('edit-blog')) {
    // do stuff
}

如果出现"null"错误或异常,如何返回false?

**我尝试过的**

我试过try/catch,但它没有任何作用:

  try {
    if (!$user_id) return Auth::user();
    return User::where('id', $user_id)->first();
} catch (Exception $ex) {
    return false;
}

感谢您的支持。

在调用can 之前,您需要检查用户是否已登录

if(Auth::check() && user()->can('edit-post')){
    Return true;
 }else{
    Return false;
 }