如何在Laravel 5中的所有视图中共享Auth :: user?

时间:2015-05-09 03:54:50

标签: php laravel laravel-5

我需要将当前登录的用户共享给所有视图。我试图在view->share()文件中使用AppServiceProvider.php方法。

我有以下内容:

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use Illuminate\Contracts\Auth\Guard;


class AppServiceProvider extends ServiceProvider {


    public function boot(Guard $guard)
    {
        view()->share('guard', $guard);
        view()->share('user', $guard->user());
    }

    //..
}

但是,当我查看视图(登录后)时,user变量为空。奇怪的是,$guard->user(受保护的属性,而不是公共方法用户())不是。我得到的输出如下:

enter image description here

请注意,填充了guard-&gt;用户变量,但用户变量为null。

2 个答案:

答案 0 :(得分:9)

最好将View Composers用于此。

boot()中的ComposerServiceProvider中:

view()->composer('*', 'App\Http\ViewComposers\GlobalComposer');

在HTTP / ViewComposers中创建一个类GlobalComposer,并创建函数:

public function compose( View $view )
{
    $view->with('authUser', Auth::user());
}

http://laravel.com/docs/5.0/views#view-composers

答案 1 :(得分:6)

您可以在不创建文件的情况下解决此问题。

将这些代码添加到ServiceProvider的boot()操作中,就是这样。

view()->composer('*', function($view){
  $view->with('user', Auth::user());
});

来源也相同:http://laravel.com/docs/5.0/views#view-composers

查看通配符视图编辑器