首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel-5.1将当前登录的用户注入我的控制器

Laravel-5.1将当前登录的用户注入我的控制器
EN

Stack Overflow用户
提问于 2015-08-08 09:36:19
回答 4查看 6.4K关注 0票数 9

如何将当前登录的用户模型注入我的控制器?

例如,在我的控制器中,我目前拥有:

代码语言:javascript
运行
复制
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.');
}

但与其用这句话:

代码语言:javascript
运行
复制
$user = User::findOrFail(Auth::user()->id);

最好将User模型插入到我的控制器中,该控制器加载已经登录的用户,这样我就可以这样做:

代码语言:javascript
运行
复制
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.');
}

我怎样才能做到这一点?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-08 10:39:30

Request对象(以及相应的任何表单请求类)可以访问当前通过身份验证的用户:

代码语言:javascript
运行
复制
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模型上的每个属性:

代码语言:javascript
运行
复制
$user = $request->user()->fill($request->except('password'));

if ($request->has('password')) {
    $user->password = bcrypt($request->input('password'));
}

$user->save();
票数 14
EN

Stack Overflow用户

发布于 2015-08-08 11:11:15

为了注入当前用户,您需要实现一个简单的服务提供者。需要两个简单的步骤来实现这一点:

  1. 实现提供程序 //app/Providers/CurrentUserServiceProvider.php app->bind(用户::类,函数($app) ){返回Auth::user();};}}
  2. 注册您的提供者 //config/app.php‘Provider’=> //现有提供者'App\ providers \CurrentUserServiceProvider‘
票数 9
EN

Stack Overflow用户

发布于 2016-12-22 08:23:43

从Laravel5.0开始,可以使用类Illuminate\Contracts\Auth\Authenticatable将当前登录的用户注入从ioc容器解析的控制器或类中。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31891729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档