如何将当前登录的用户模型注入我的控制器?
例如,在我的控制器中,我目前拥有:
public function update(SaveAccountRequest $request)
{
$user = User::findOrFail(Auth::user()->id);
$user->first_name = $request->get('first_name');
$user->last_name = $request->get('last_name');
$user->email = $request->get('email');
if($request->has('password')) {
$user->password = Hash::make($request->get('password'));
}
$user->save();
return redirect('/admin/account')->with('success', 'Your details have been saved.');
}
但与其用这句话:
$user = User::findOrFail(Auth::user()->id);
最好将User
模型插入到我的控制器中,该控制器加载已经登录的用户,这样我就可以这样做:
public function update(SaveAccountRequest $request, User $user)
{
$user->first_name = $request->get('first_name');
$user->last_name = $request->get('last_name');
$user->email = $request->get('email');
if($request->has('password')) {
$user->password = Hash::make($request->get('password'));
}
$user->save();
return redirect('/admin/account')->with('success', 'Your details have been saved.');
}
我怎样才能做到这一点?
发布于 2015-08-08 10:39:30
Request
对象(以及相应的任何表单请求类)可以访问当前通过身份验证的用户:
public function update(SaveAccountRequest $request)
{
$user = $request->user();
$user->first_name = $request->input('first_name');
$user->last_name = $request->input('last_name');
$user->email = $request->input('email');
if ($request->has('password')) {
$user->password = bcrypt($request->input('password'));
}
$user->save();
return redirect('/admin/account')->with('success', 'Your details have been saved.');
}
不需要注入任何东西、使用外观或查询数据库。
此外,如果属性标记为可填充,则只需大量分配属性,而不必单独分配User
模型上的每个属性:
$user = $request->user()->fill($request->except('password'));
if ($request->has('password')) {
$user->password = bcrypt($request->input('password'));
}
$user->save();
发布于 2015-08-08 11:11:15
为了注入当前用户,您需要实现一个简单的服务提供者。需要两个简单的步骤来实现这一点:
发布于 2016-12-22 08:23:43
从Laravel5.0开始,可以使用类Illuminate\Contracts\Auth\Authenticatable
将当前登录的用户注入从ioc容器解析的控制器或类中。
https://stackoverflow.com/questions/31891729
复制相似问题