V4n*_*ll4 7 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.');
}
Run Code Online (Sandbox Code Playgroud)
但不是这条线:
$user = User::findOrFail(Auth::user()->id);
Run Code Online (Sandbox Code Playgroud)
将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.');
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Mar*_*ean 11
的Request对象(以及反过来,任何形式的请求类)附带在用户当前登录:
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.');
}
Run Code Online (Sandbox Code Playgroud)
无需注入任何东西,使用façades或查询数据库.
此外,如果您的属性标记为可填充,则只需对其进行批量分配,而无需User单独为模型分配每个属性:
$user = $request->user()->fill($request->all());
if ($request->has('password')) {
$user->password = bcrypt($request->password);
}
$user->save();
Run Code Online (Sandbox Code Playgroud)
从 Laravel 5.0 开始,该类Illuminate\Contracts\Auth\Authenticatable可用于将当前登录的用户注入到从 ioc 容器解析的控制器或类中。
为了注入当前用户,您需要实现一个简单的服务提供者.要实现这一目标,需要两个简单的步骤:
实施提供者
//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();
});
}
}
Run Code Online (Sandbox Code Playgroud)注册您的提供商
//config/app.php
'providers' => [
//here go existing providers
'App\Providers\CurrentUserServiceProvider'
]
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
4381 次 |
| 最近记录: |