2014-10-09 113 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