在更新请求上没有用户

时间:2018-11-05 20:51:26

标签: php laravel eloquent

我想更新我的用户表中的一列。我已将一个按钮链接到PUT请求,但没有从请求中获取用户,我在这里错过了什么?

代码

路线:

Route::resource('/admin', 'AdminController')->only(['index','update','destroy'])->middleware('is_admin');  

控制器:

public function update(Request $request, User $user)
{
    $requestData = $request->all();
    dd($requestData, $user, $user->id);
    // return redirect('/admin');
}

查看:

{!! Form::open(['action' => ['AdminController@update', $user->id],'method' => 'POST', 'class'=> 'float-right']) !!}
{{Form::hidden('_method','PUT')}}
{{Form::button('Remove points', ['type' =>'submit', 'class' => 'submit-btn'])}}
{!! Form::close() !!}

DD输出:

array:2 [▼
  "_token" => "5AOzOmyktXUiuW5OJNQbVOuDuFtEWgkH1h1Zocgo"
  "_method" => "PUT"
]
User {#242 ▼
  #fillable: array:6 [▶]
  #hidden: array:2 [▶]
  #connection: null
  #table: null
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: false
  +wasRecentlyCreated: false
  #attributes: []
  #original: []
  #changes: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #visible: []
  #guarded: array:1 [▶]
  #rememberTokenName: "remember_token"
}
null

1 个答案:

答案 0 :(得分:4)

TL; DR;

将您的$user属性重命名为$admin

说明

Laravel仅在定义Route Model Binding模式时才会注入模型:

您的路线必须接受与您要注入的属性名称相同的参数,例如:

PATCH admin\{user}

并且控制器的方法必须具有相同名称的属性:

public function update(User $user) { /** **/ }

由于您是使用Route::resource('admin', ...)方法定义路线的,因此laravel会自动使用与资源相同的名称来命名该参数,因此您的路线将如下所示;

PATCH admin\{admin}

这就是Laravel无法正确注入模型的原因,因此它只能注入一个空模型(依赖项注入的默认行为是实例化该类并注入它)。

因此,您方法的属性必须命名为$admin

public function update(Request $request, User $admin) { /** **/ }

通过这种方式,Laravel可以看到此参数应该填充有加载有URL上给出的ID的模型。