如何在Laravel 5.2中拥有全局$ user变量?

时间:2016-05-24 05:32:34

标签: authentication view global laravel-5.2 shared

上下文

  

Laravel附带两个开箱即用的身份验证控制器,位于App\Http\Controllers\Auth命名空间中。

     

...

     

您可以通过Auth门面访问经过身份验证的用户:$user = Auth::user();

参考:Laravel 5.2 Documentation

我已成功登录,并且我已重定向到AuthController.php中定义的正确位置,但现在我需要访问大多数$user对象我的观点,例如检查用户的信息,访问权限等等。

问题

如何在我的所有观看中正确提供$user变量的访问权限?

1 个答案:

答案 0 :(得分:1)

其他人如何做到这一点

Laracast的用户imJohnBen询问how a Laravel 5 service provider can be used to share view variables。他后来分享了他如何使用现有ComposerServiceProvider并添加GlobalComposer以便能够在所有视图上共享变量。

我按照他的回答但是有一个缺失的步骤。我无法为Laracast论坛做出贡献,从而导致创建StackOverflow问题。

我在这里使用的Laravel版本是Laravel 5.2.*

答案

  1. 找到现有的ComposerServiceProvider课程。我在vendor/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php找到了我的。

  2. 导入/引用文件顶部的ViewFactory依赖项。

    use Illuminate\Contracts\View\Factory as ViewFactory;
    
  3. 添加boot方法,如果已存在,则进行修改。确保注入ViewFactory(在引导函数中将其添加为参数):

    /**
      * Register bindings in the container.
      *
      * @return void
      */
      public function boot(ViewFactory $view)
      {
          $view->composer('*', 'App\Http\ViewComposers\GlobalComposer');
      }
    
  4. ViewComposers文件夹中创建一个app/Http文件夹。
  5. GlobalComposer.php文件夹中创建一个ViewComposers文件,其中包含以下内容:

    <?php
    namespace App\Http\ViewComposers;
    
    use Illuminate\Contracts\View\View;
    use Illuminate\Support\Facades\Auth;
    
    class GlobalComposer {
    
        /**
         * Bind data to the view.
         *
         * @param  View  $view
         * @return void
         */
        public function compose(View $view)
        {
            $view->with('user', Auth::user());
        }
    
    }
    
  6. (缺少的步骤)最后,通过转到config/app.php文件确保所有内容都已连线,并确保ComposerServiceProvider在您的提供商列表中。

    'providers' = [
        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
    
        // etc...
    
        Illuminate\Foundation\Providers\ComposerServiceProvider::class,
    ] 
    
  7. 之后,$user变量以及您在GlobalComposer中定义的任何其他变量都可以在您呈现的任何视图中访问。