Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-5.1将当前登录用户注入我的控制器_Php_Laravel_Laravel 5.1 - Fatal编程技术网

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

Php Laravel-5.1将当前登录用户注入我的控制器,php,laravel,laravel-5.1,Php,Laravel,Laravel 5.1,如何将当前登录的用户模型注入控制器 例如,在我的控制器中,我当前有: public function update(SaveAccountRequest $request) { $user = User::findOrFail(Auth::user()->id); $user->first_name = $request->get('first_name'); $user->last_name = $request->get('last_n

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

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

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);
只需将
用户
模型注入我的控制器(加载已登录的用户)就可以了,这样我就可以为我们提供以下内容:

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

如何实现这一点?

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

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.');
}
无需注入任何东西、使用façades或查询数据库

此外,如果属性标记为可填充,则可以批量分配它们,而无需分别分配
用户
模型上的每个属性:

$user=$request->user()->fill($request->except('password');
如果($request->has('password')){
$user->password=bcrypt($request->input('password'));
}
$user->save();

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

  • 实现提供程序

    //app/Providers/CurrentUserServiceProvider.php
    <?php namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    
    class CurrentUserServiceProvider extends ServiceProvider
    {
      public function register() 
      {
        $this->app->bind(User::class, function ($app) {
          return Auth::user();  
        });
      }
    }
    

  • 自laravel 5.0以来,类
    illumb\Contracts\Auth\authenticable
    可用于将当前登录的用户注入控制器或从ioc容器解析的类。

    L5您可以尝试Facade:

    use Illuminate\Support\Facades\Auth;
    

    您是否尝试过使用用户id作为第二个参数,这可能要简单得多。您可以在5.4中找到更多详细信息,您需要
    return\Auth::user()注意\prepending Autha)如果你看,你会看到他已经在使用Facade了。b) 这个问题要求的是依赖注入,而不是反模式。这是对原始问题的正确回答。@chugadie-你的意思是这样吗?公共函数myAction(可验证的$user)
    
    use Illuminate\Support\Facades\Auth;