1 回答

TA貢獻1828條經(jīng)驗 獲得超4個贊
您遇到此問題的原因是因為策略中的更新方法需要模型的已加載實例,但是,在您當(dāng)前的設(shè)置中,您將傳遞模型的未加載/空實例。
您可以通過使用Route Model Binding來解決這個問題。將您的路線更改{id}為{post}:
Route::put('post/{post}','PostController@update')->middleware('auth:api');
然后從您的方法中刪除$id參數(shù):update()
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
$request->validate(['content' => 'required']);
$post->content = $request->content;
$post->save();
return response()->json($post, 200);
}
另外,請注意現(xiàn)在您不必使用find來加載模型,這是因為 Laravel 正在為您加載模型。
路由模型綁定通過查找與 uri 段同名的參數(shù)名稱來工作,即{post}在路由和$post方法參數(shù)上,并且由于$post類型提示是模型,Laravel 知道使用 的值{post}來加載(查找)Post模型。
- 1 回答
- 0 關(guān)注
- 107 瀏覽
添加回答
舉報