每个控制器的用户对象,如果经过身份验

时间:2015-11-26 17:35:01

标签: 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 response(['status' => 'OK']);
}

您可以想象我需要多次请求用户对象,即使在这个控制器中也是如此。我怎样才能改善这个?我曾想过在Controller父类中声明一个用户变量,或者使用Middleware。我读到了依赖注入,但我不完全理解它,我无法弄清楚如何很好地实现它。

2 个答案:

答案 0 :(得分:0)

您可以在路线

中设置身份验证
Route::get('profile', [
     'middleware' => 'auth',
     'uses' => 'ProfileController@show'
]);

或控制器的构造

public function __construct()
{
    $this->middleware('auth');
}

然后在控制器内部,您可以通过

获取经过身份验证的用户的实例
$request->user()

答案 1 :(得分:0)

您可以创建一个父控制器,例如BaseController,并从该控制器扩展每个控制器。

class BaseController extends Controller{
    protected $user;

    function __construct(){
        $this->$user = Auth::user();
    }
}

现在在你的pagesController中说出来

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']);
    }

}