问题'我现在要面对的是,对于用户通过身份验证时使用的每个控制器,我都必须请求$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。我读到了依赖注入,但我不完全理解它,我无法弄清楚如何很好地实现它。
答案 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']);
}
}