简化将用户变量传递给控制器的过程


streamline passing user variable to controller laravel

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

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

我该如何简化它?

例如:

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

我想使用视图编辑器,但我仍然需要$user在控制器内获取数据…

如果你需要在每个控制器中访问$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. User定义为控制器操作中的依赖项

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