[英]Data validation in the model
我對 Laravel 並不陌生,但我可能在某個地方犯了架構錯誤。
我有一個類(模型上方的第二層),其中存儲了所有業務邏輯。 我需要驗證傳入的數據,例如:是電子郵件、電子郵件格式、唯一性等等。 驗證器對此非常有用。
我可以在控制器中執行此操作: $request-validate()
。 但是我想在模型本身中進行驗證,因為可以從UserController
和GraphQL::createUserMutation
等不同地方調用該方法。
在兩個地方編寫相同的代碼是個壞主意,不是嗎?
在用戶控制器中:
$validator = Validator::make(
$request->all(),
[
'email' => 'email|max:255|unique:users',
'password' => 'required|min:6|max:20|confirmed',
'password_confirmation' => 'required|same:password',
],
);
if ($validator->fails()) {
...
}
User::query()->createUser($request->all());
和 GraphQL createUserMutation:
$validator = Validator::make(
$request->all(),
[
'email' => 'email|max:255|unique:users',
'password' => 'required|min:6|max:20|confirmed',
'password_confirmation' => 'required|same:password',
],
);
if ($validator->fails()) {
...
}
User::query()->createUser($request->all());
因此,我更喜歡在一個地方檢查:在模型中。
如果我返回一個數組,一切都會成功:
if ($validator->fails()) {
return $validator->messages();
}
但是如果我想拋出異常怎么辦? 我將錯誤消息轉換為字符串並拋出異常:
$result = [];
foreach ($messages->toArray() as $field => $messagesList) {
foreach ($messagesList as $msg){
$result[] = '- '.$msg;
}
}
throw new \Exception(implode("\n<br/>", $result));
我的方法有多正確? 也許我是在重新發明輪子,但到目前為止我還沒有找到更好的解決方案。 或者,仍然堅持在控制器中進行驗證,復制驗證代碼?
我認為你在 Laravel 中缺少表單請求驗證
第一步:通過 artisan 命令php artisan make:request YourRequestName
創建請求
這將在目錄app\Http\Requests中創建一個名為YourRequestName.php的類
第二步:打開這個文件,默認情況下你會發現一個規則函數,你將在其中返回一個規則數組
第三步:添加一個名為messages的函數,您將在其中返回一組驗證消息
第四步:在項目中的任何方法中,您想使用YourRequestName進行驗證,只需將其作為參數而不是Request Class注入即可
並且不要忘記在控制器中使用StoreRequest 類
最后這是 laravel 文檔中的部分:
https://laravel.com/docs/9.x/validation#form-request-validation
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.