[英]Get current route name in AppServiceProvider in Laravel 5.1
[英]Laravel - How to get current user in AppServiceProvider
所以我通常使用Auth::user()
獲取當前用戶,當我確定用戶是否實際登錄Auth::check
。 但是,這在我的AppServiceProvider
似乎不起作用。 我正在使用它在所有視圖中共享數據。 我在登錄時同時對Auth::user()
和Auth::check()
進行var_dump
,我得到NULL
和false
。
如何在AppServiceProvider
獲取當前用戶? 如果這是不可能的,那么在所有視圖中獲取每個用戶唯一的數據(根據user_id
不同的數據)的方法是什么。 這是我的澄清代碼。
if (Auth::check()) {
$cart = Cart::where('user_id', Auth::user()->id);
if ($cart) {
view()->share('cart', $cart);
}
} else {
view()->share('cartItems', Session::get('items'));
}
Laravel 會話在中間件中初始化,因此您無法從服務提供者訪問會話,因為它們在請求生命周期中的中間件之前執行
您應該使用中間件來共享會話中的變量
如果由於其他原因您想在服務提供者中執行此操作,您可以使用帶有回調的視圖編輯器,如下所示:
public function boot()
{
//compose all the views....
view()->composer('*', function ($view)
{
$cart = Cart::where('user_id', Auth::user()->id);
//...with this variable
$view->with('cart', $cart );
});
}
只有在實際組合視圖時才會執行回調,因此中間件將已經執行並且會話將可用
在AuthServiceProvider
的boot()
函數中編寫這些代碼行
public function boot()
{
view()->composer('*', function($view)
{
if (Auth::check()) {
$view->with('currentUser', Auth::user());
}else {
$view->with('currentUser', null);
}
});
}
這里*
表示 - 在您的所有視圖中$currentUser
變量都可用。
然后,如果用戶已通過身份驗證,則從視圖文件{{ currentUser }}
將為您提供用戶信息,否則為空。
根據我的 Laravel 7 經驗, Auth::user()
在AppServiceProvider.php
不起作用,而是輔助函數auth()->user()
為我解決了問題。
public function boot()
{
if (auth()->check()) {
View::composer('layout.app', function ($view) {
$userName = auth()->user()->name;
$view->with(['userName' => $userName]);
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.