我需要能夠將數據傳遞到所有視圖當用戶登錄訪問AppServiceProvider中的用戶?
這裏是我的AppServiceProvider
目前的樣子:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
if (Auth::check())
{
View::share('key', 'value');
}
}
}
然而,數據永遠不會傳遞給視圖因爲我不能在AppServiceProvider
中使用Auth
(出於某種原因),所以if語句條件永遠不會被滿足。
繼previous solution我才發現,我試着這樣做:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::composer('*', function ($view)
{
if (Auth::check())
{
View::share('key', 'value');
}
}
}
}
這個工作,但問題是,每當一個視圖呈現封閉被調用。例如,如果我的刀片模板包含3個其他刀片模板(它所做的),則上面的關閉將被調用4次。 Explained further here。
那麼如何在AppServiceProvider
中正確訪問用戶呢?
看起來,當服務提供者被加載時,認證機制尚未設置。唯一可以考慮的解決方法是爲「Illuminate \ Auth \ Events \ Login」事件添加一個處理程序,該事件將會話的密鑰和值存儲在會話中。然後,您只需將其從視圖中的會話中取出即可。 – user3158900