gpt4 book ai didi

laravel - laravel first() 方法的概念

转载 作者:行者123 更新时间:2023-12-04 12:14:22 26 4
gpt4 key购买 nike

laravel first()方法非常简单,这就是为什么这个问题可能很愚蠢,但我不理解 first() 的用法。方法。

实际上,我正在关注一个 youtube 教程,在该教程中,如果用户具有 admin 的角色,我将对其进行身份验证。那么只有他才能获得route的访问权限否则将被重定向到 home .

代码没有错误或问题,但我的理解。

我正在返回用户 User如果用户具有中间件传递的角色,则模型类函数

路线

Route::get('admin', function (){
return 'This is Admin page';
})->middleware(['auth', 'auth.admin']);

中间件

public function handle($request, Closure $next)
{
if (Auth::user()->hasAnyRole('admin'))
{
return $next($request);
}
return redirect('home');
}

用户模态

public function hasAnyRole($role)
{
return null !== $this->roles()->where('name', $role)->first();
}

如果我使用 first() hasAnyRole 中的方法功能然后只有 route受其他用户保护且仅 admin进入路线,
如果我删除 first()方法然后所有用户都可以访问 route我不明白为什么?

最佳答案

根据文档:

The first method returns the first element in the collection that passes a given truth test:



collect([1, 2, 3, 4])->first(function ($value, $key) {
return $value > 2;
});
// 3

You may also call the first method with no arguments to get the first element in the collection. If the collection is empty, null is returned:



collect([1, 2, 3, 4])->first();
// 1

在您的问题中,如果您不使用 first()方法,它将返回一个没有数据的集合,例如:

Roles {#1
[]
}

此空集合不等于 null .

关于!==运算符(operator)

$x !== $y

在前面的代码片段中,如果 $x 不等于 $y,或者它们的类型不同,则返回 true。

所以,在你的代码中:

return null !== $this->roles()->where('name', $role)->first();

它将返回 true如果(且仅当)用户没有所需的角色,您可以通过 first() 完成什么工作方法:

$this->roles()->where('name', 'admin')->first();

如果用户没有 admin角色,则返回 null ,什么是同类型的 null (在你的比较中)。所以它返回 false , 事业 null !== null返回 false,并且未授予访问权限。

如果你使用类似的东西

$this->roles()->where('name', 'admin');

并且用户没有 admin角色,它返回如下内容:

Roles {#1
[]
}

现在您的 hasAnyRole函数返回 true并且授予用户访问权限,因为空集合不是同一类型,也不等于 null ;

关于 first 的文档方法。

关于laravel - laravel first() 方法的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56516181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com