简化将用户变量传递给控制器​​laravel

时间:2015-08-22 10:41:44

标签: php laravel laravel-5

我在我的Projects控制器的每个方法中使用$user = Auth::user();

我用它来获取属于用户的项目,并传递给视图。

我如何简化?

例如:

public function index()
    {
        $user     = Auth::user();
        $projects = $user->projects;
        return view('project.index', compact('user', 'projects'));
    }

我考虑使用视图编辑器,但我仍然需要控制器内的$ user来获取数据......

1 个答案:

答案 0 :(得分:0)

如果您需要在每个控制器中访问 $ user ,您可以通过服务容器注入该功能。 Laravel不会将用户存储在容器中,因此您需要定义自己的服务提供者。幸运的是,这很简单。

  1. 实施提供商

    //app/Providers/CurrentUserServiceProvider.php
    <?php namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    
    class CurrentUserServiceProvider extends ServiceProvider
    {
      public function register() 
      {
        $this->app->bind(User::class, function ($app) {
          return Auth::user();  
        });
      }
    }
    
  2. 注册您的提供商

    //config/app.php
    'providers' => [
      //here go existing providers
      'App\Providers\CurrentUserServiceProvider'
    ]
    
  3. 用户定义为控制器操作中的依赖项

    class MyController extends Controller {
      public function someAction(User $user) {
        echo $user->id;
      }
    }