簡體   English   中英

rest api 的 laravel 驗證器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM