[英]laravel validator for rest api
我正在嘗試遵循 CRUD 上 REST api 的最佳實踐。
GET: users/ -> all
GET: users/:id -> one specific user.
POST: users/ -> add one
PUT: users/:id -> update specific user.
DELETE: users/:id -> delete one user.
在 laravel 8 我想驗證 url :id
使用驗證器,所以我在刪除用戶時有這樣的:
$validator = Validator::make(['id' => $request->id], [
'id' => 'exists:users,id,deleted_at,NULL',
]);
這種更新用戶的方式:
$validator = Validator::make(array_merge($request->all(), ['id' => $request->id]), [
'id' => 'required|exists:users,id,deleted_at,NULL',
'name' => 'required',
'surname' => 'required',
'email' => 'required|email:rfc,dns'
]);
如您所見,我必須將id
放在數組上和/或與$request->all()
合並。 laravel 中有什么方法可以對請求執行此操作嗎?
我通過 Laravel 找到了 3 種方法:
$request->add(['variable' => 'value']);
$request->merge(["key"=>"value"]);
$request->request->set(key, value);
但是,在使用 controller 方法之前向請求添加路由參數的解決方案會更好。
您可以在驗證之前即時更新請求 object 並添加 ID 字段,例如
$request['id'] = $id;
// note: the $id is your function's parameter name
$validator = Validator::make(array_merge($request->all()), [
'id' => 'required|exists:users,id,deleted_at,NULL',
'name' => 'required',
'surname' => 'required',
'email' => 'required|email:rfc,dns'
]);
您可以像您正在做的那樣做,但使用路由 model 綁定將是 go 的方式。
現在,當您想通過向/users/:id
發送PUT
來更新用戶時,並且該用戶不存在,您將獲得422
。 但是您真正想要的是404
。
通過路由 model 綁定,Laravel 將檢查 model 是否存在,如果不存在則使用404
中止。
如果路由 model 綁定不是一個選項,您也可以不使用驗證器驗證 id 並使用User::findOrFail($request->input('id'))
檢索用戶,然后框架仍將中止404
如果找不到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.