如何将当前登录的用户模型注入我的控制器?
例如,在我的控制器中,我目前有:
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.');
}
我怎样才能做到这一点?
答案 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)
为了注入当前用户,您需要实现一个简单的服务提供者。 需要两个简单的步骤才能实现这一目标:
实施提供商
//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();
});
}
}
注册您的提供商
//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;