如何使已登录的用户对象可用于 Laravel 5.3 中的所有视图

How do I make a logged in user object available to all views in Laravel 5.3

我希望能够在我的视图中获得登录用户的详细信息。例如 {{ $user->email }}.

这是我的 Controller.php:

public $view_data = array();

public function __construct()
{
    $this->middleware('auth');
    $this->view_data['user'] = Auth::user();
}

$user 在我看来 return NULL。我错过了什么吗?

默认情况下已在所有视图中可用:

Auth::user()
auth()->user()

您可以通过以下方法在您的视图中直接访问登录用户:

{!! Auth::user()->name !!}
{!! auth()->user()->name !!}
{!! access()->user()->name !!}

{{ \Auth::user() }} {{ \Auth::user()['email'] }}

Laravel已经在您登录后提供此服务,只需填写:

{{ Auth::user()->email }}
{{ auth()->user()->email }}

您还可以对所有视图使用 ServiceProvider:

创建服务提供商:php artisan make:provider UserServiceProvider

转到

app\providers\UserServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
use Auth;

class UserServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */

    public function boot()
    { 
        if(Auth::check()){
            $user= Auth::user();
            View::share('user', $user);
        }
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
    }
}

比在 config\app.php

中注册此服务提供商
App\Providers\UserServiceProvider::class,

现在用户对象可用于所有视图你只需简单地写:

{{ $user->email }} 
{{ $user->username }}

Laravel Sharing Data With All Views