我在blade.php 中有3 個帶有型別編號的輸入標簽。我想驗證總和等于 100。那么,怎么做呢?謝謝你的幫助。
刀片.php
<input type="number" name="number1" />
<input type="number" name="number2" />
<input type="number" name="number3" />
控制器
public function store(Request $request) {
$data = $request->validate([
'number1' => 'required',
'number2' => 'required',
'number3' => 'required',
]);
$sum = $data['number1'] $data['number2'] $data['number3'];
$myDb = new Mynumber();
$myDb->number1 = $data['number1'];
$myDb->number2 = $data['number2'];
$myDb->number3 = $data['number3'];
$myDb->save();
}
uj5u.com熱心網友回復:
您可以通過在服務提供者中添加新規則來擴展驗證器:
$validator->extend("sumsTo", function ($attribute, $value, $parameters) {
$expected = floatval(array_shift($parameters));
$otherParameters = request()->only($parameters);
return floatval(array_sum(array_merge(array_values($otherParameters), [ $value ]))) === $expected;
});
然后你會用它作為:
$request->validate([
'field1' => 'sumsTo:100,field2,field3',
'field2' => 'sumsTo:100,field1,field3'
'field3' => 'sumsTo:100,field1,field2'
]);
這也會將所有 3 個欄位標記為失敗。
uj5u.com熱心網友回復:
如果您想保持在 Laravel 驗證器的范圍內,我建議您使用after驗證掛鉤或創建一個臨時欄位(在 PHP 中,不要使用客戶端技術來完成這項作業!)以及所有必要的總和欄位并對其進行驗證。
$validator = Validator::make([
'field1' => 50,
'field2' => 25,
'field3' => 22,
], [
'field1' => 'required|numeric',
'field2' => 'required|numeric',
'field3' => 'required|numeric',
]);
$validator->after(function ($validator) {
if ($validator->getData()['field1'] $validator->getData()['field2'] $validator->getData()['field3'] !== 100) {
$validator->errors()->add('field1', 'Make sure the sum of all fields equals 100.');
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/370102.html
