Laravel 每个控制器的用户对象(如果经过身份验证)

Laravel 每个控制器的用户对象(如果经过身份验证),laravel,controller,laravel-5.1,middleware,Laravel,Controller,Laravel 5.1,Middleware,我现在面临的“问题”是,对于用户经过身份验证时使用的每个控制器,我必须请求$user=Auth::user()。例如: public function store(Request $request) { $user = Auth::user(); $building = Building::findOrFail($request->building); $user->buildings()->save($building); return r

我现在面临的“问题”是,对于用户经过身份验证时使用的每个控制器,我必须请求
$user=Auth::user()。例如:

public function store(Request $request)
{
    $user = Auth::user();

    $building = Building::findOrFail($request->building);
    $user->buildings()->save($building);

    return response(['status' => 'OK']);
}

您可以想象,我需要多次请求用户对象,即使在这个控制器中也是如此。我该如何改进这一点?我考虑过在控制器父类中声明一个用户变量,或者使用中间件。我读过关于依赖注入的内容,但我不完全理解它,也不知道如何很好地实现它。

您可以在路由中设置身份验证

Route::get('profile', [
     'middleware' => 'auth',
     'uses' => 'ProfileController@show'
]);
或在控制器的构造中

public function __construct()
{
    $this->middleware('auth');
}
然后在控制器内部,您可以通过

$request->user()

您可以在路由中设置身份验证

Route::get('profile', [
     'middleware' => 'auth',
     'uses' => 'ProfileController@show'
]);
或在控制器的构造中

public function __construct()
{
    $this->middleware('auth');
}
然后在控制器内部,您可以通过

$request->user()

您可以创建一个父控制器,比如BaseController,并从此控制器扩展每个控制器

class BaseController extends Controller{
    protected $user;

    function __construct(){
        $this->$user = Auth::user();
    }
}
现在在你的页面控制器中说

class PagesController extends BaseController{
    function __construct(){
         parent::__construct();
    }

    public function store(Request $request)
    {

        $building = Building::findOrFail($request->building);
        $this->user->buildings()->save($building);

        return response(['status' => 'OK']);
    }

}

您可以创建一个父控制器,比如BaseController,并从此控制器扩展每个控制器

class BaseController extends Controller{
    protected $user;

    function __construct(){
        $this->$user = Auth::user();
    }
}
现在在你的页面控制器中说

class PagesController extends BaseController{
    function __construct(){
         parent::__construct();
    }

    public function store(Request $request)
    {

        $building = Building::findOrFail($request->building);
        $this->user->buildings()->save($building);

        return response(['status' => 'OK']);
    }

}

谢谢你的反馈。我已经在想如何用这种方式实现它,这是非常有用的!谢谢你的反馈。我已经在想如何用这种方式实现它,这是非常有用的!我非常喜欢这个解决方案。我不知道这是否是解决这个问题的“正确”方法,但我很清楚发生了什么,所以我想我会用这个。谢谢你的反馈,我实现了这一点,效果非常好!非常感谢你!很高兴它起作用了。如果这有帮助,您应该接受它。:)我非常喜欢这个解决方案。我不知道这是否是解决这个问题的“正确”方法,但我很清楚发生了什么,所以我想我会用这个。谢谢你的反馈,我实现了这一点,效果非常好!非常感谢你!很高兴它起作用了。如果这有帮助,您应该接受它。:)