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

时间:2015-08-08 09:36:19

标签: 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_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.');
}

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:10)

/** * @Given /^taxonomy "([^""]*)" has following taxons:$/ */ public function taxonomyHasFollowingTaxons($taxonomyName, TableNode $taxonsTable) { $taxonomy = $this->findOneByName('taxonomy', $taxonomyName); $manager = $this->getEntityManager(); $taxons = array(); foreach ($taxonsTable->getRows() as $node) { $taxonList = explode('>', $node[0]); $parent = null; foreach ($taxonList as $taxonName) { $taxonName = trim($taxonName); if (!isset($taxons[$taxonName])) { /* @var $taxon TaxonInterface */ $taxon = $this->getRepository('taxon')->createNew(); $taxon->setName($taxonName); $taxons[$taxonName] = $taxon; } $taxon = $taxons[$taxonName]; if (null !== $parent) { $parent->addChild($taxon); } else { $taxonomy->addTaxon($taxon); } $parent = $taxon; } } $manager->persist($taxonomy); $manager->flush(); } 对象(以及任何表单请求类)随当前登录用户一起提供:

Request

无需注入任何东西,使用façades或查询数据库。

此外,如果您的属性被标记为可填充,则只需对其进行批量分配,而无需单独为public function update(SaveAccountRequest $request) { $user = $request->user(); $user->first_name = $request->first_name; $user->last_name = $request->last_name; $user->email = $request->email; if ($request->has('password')) { $user->password = bcrypt($request->password); } $user->save(); return redirect('/admin/account')->with('success', 'Your details have been saved.'); } 模型分配每个属性:

User

答案 1 :(得分:7)

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

  1. 实施提供商

    //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();  
        });
      }
    }
    
  2. 注册您的提供商

    //config/app.php
    'providers' => [
      //here go existing providers
      'App\Providers\CurrentUserServiceProvider'
    ]
    

答案 2 :(得分:0)

从laravel 5.0开始,类Illuminate\Contracts\Auth\Authenticatable可用于将当前登录的用户注入到从ioc容器中解析的控制器或类中。

答案 3 :(得分:0)

L5你可以试试Facade:

use Illuminate\Support\Facades\Auth;