2014-10-09 85 views
6

我試圖做一個view::share('current_user', Auth::User());,但在laravel 5我找不到在哪裏做這個,在L4中你可以在baseController中做到這一點,但那個不再存在。Laravel 5查看::共享

GRT格倫

回答

11

首先,你也許可以創建自己的BaseController,並在其他控制器擴展。

第二件事,你可以直接在視圖中使用Auth:user(),你不需要在視圖中分配任何東西。

其他用途,你可以去app/Providers/App/ServiceProvider.phpboot方法,你可以View::share('current_user', Auth::User());但還是當然,你需要添加第一個導入的命名空間:

use View; 
use Auth; 

,因爲這個文件是在App\Providers命名空間

4

這將有助於:

App::booted(function() 
{ 
    View::share('current_user', Auth::user()); 
}); 
+0

你會在哪裏放這樣的代碼? :) – Kiwi 2014-10-09 10:35:59

+0

根據註冊功能 – 2014-10-09 10:43:13

1

我v試了一下,把它放在應用程序/供應商根本不工作。另一種方法是創建一個全局中間件並將View :: share('currentUser',Auth :: user());那裏。

8

我使用Laravel 5.0.28,view::share('current_user', Auth::User())因爲這個問題https://github.com/laravel/framework/issues/6130

我要做的反而是,首先使用工匠一個新的服務提供商不工作了。

php artisan make:provider ComposerServiceProvider 

然後加入ComposerServiceProvider到config/app.php提供商陣列

//... 
'providers' => [ 
    //... 
    'App\Providers\ComposerServiceProvider', 
] 
//... 

然後打開app/Providers/ComposerServiceProvider.php剛纔創建,引導方法中添加以下

/** 
* Bootstrap the application services. 
* 
* @return void 
*/ 
public function boot() 
{ 
    View::composer('*', function($view) 
    { 
     $view->with('current_user', Auth::user()); 
    }); 
} 

最後,進口ViewAuth門面

use Auth, View; 

有關詳細信息,請參閱http://laravel.com/docs/5.0/views#view-composers

+1

作品!太好了,謝謝。 – 2015-05-06 13:29:35

+2

根據這個問題,「在引導功能中,Auth :: user()尚未初始化,所以它被視爲空的共享視圖。」這實際上發生在我身上; Auth :: user爲null。它是如何爲你工作的? – Vic 2015-06-10 22:14:53

+0

@Vic是的,我遇到了這個問題,你的解決方案是什麼? – iatboy 2015-11-02 02:03:55

1

在Laravel 5使用相同的方法,在laravel 4:

View::share('current_user', Auth::User()); 

,或者使用視圖助手:

view()->share('current_user', Auth::User()); 

看看http://laravel.com/docs/5.0/views