【发布时间】: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两次。