Php 拉雷维尔:什么';检索当前登录用户的更好方法是什么?为什么?

Php 拉雷维尔:什么';检索当前登录用户的更好方法是什么?为什么?,php,laravel,laravel-5,laravel-5.4,Php,Laravel,Laravel 5,Laravel 5.4,我知道两种方法: 第一种是在控制器的函数中使用请求对象参数 public function index(Request $request) { $user = $request->user(); return view('home'); } 第二种是直接使用Authfacade public function index() { $user = Auth::user(); return view('home'); } 有什么不同吗?一种方法

我知道两种方法:

第一种是在控制器的函数中使用
请求
对象参数

public function index(Request $request)
{   
    $user = $request->user();
    return view('home');
}
第二种是直接使用
Auth
facade

public function index()
{   
    $user = Auth::user(); 
    return view('home');
}

有什么不同吗?一种方法比另一种更好吗?如果是,为什么?

Auth facade提供了一个快捷方式,但结果是相同的。您始终可以从控制器或视图中使用
\Auth::user()
,另一方面,如果要使用
$request
变量,则需要将其传递给视图。

这只是首选项,您可以使用:

public function index(Request $request)
{   
    $user = $request->user();
    return view('home');
}

它们都将工作相同。对于这样一段简单的代码,没有更好或更差的方法


在controller中,这没有多大区别,但如果您编写了一些服务并希望测试它们(例如编写一些单元测试),我认为更好的解决方案是在构造函数中注入Guard,而不是运行
Auth
facade或
Auth()
helper。

我更喜欢请求方法。不过,不会有任何功能上的差异。感谢您向我展示了所有4个备选方案,其中2个我不知道
public function index()
{   
    $user = Auth::user(); 
    return view('home');
}
public function index(Guard $auth)
{   
    $user = $auth->user(); 
    return view('home');
}
public function index()
{   
    $user = auth()->user(); 
    return view('home');
}