【问题标题】:Laravel - Calling a method on null & returning false if nullLaravel - 在 null 上调用方法并在 null 时返回 false
【发布时间】:2023-04-05 18:09:01
【问题描述】:

我用 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!';
}

如果用户未登录,这是错误:

在 null 上调用成员函数 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;
}

感谢您的支持。

【问题讨论】:

  • 你需要检查然后打电话。因此,将user() 调用的结果存储到一个变量中,然后对其进行检查并使用它来调用can() 方法。
  • 是的,这就是我现在正在做的,检查和调用。我想知道是否有一种方法可以直接调用,如果用户没有登录,它会自动返回 false 但猜不到。谢谢。
  • 这不是你在做的事情:我建议将调用的结果存储到一个变量中,这样你就不会查询db两次。

标签: php laravel exception


【解决方案1】:

调用前需要检查用户是否登录

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多