确保一个输入字段大于 Laravel 中的另一个
Making sure one input field is greater than the other in Laravel
我有一个表格,其中有一个 start_odo
和一个 end_odo
用于用户需要输入的车辆里程跟踪。问题是目前,他们可以输入高于 end_odo
的 start_odo
,这会导致负差值。有什么方法可以确保 end_odo
总是更高?
作为 Laravel 的新手,我读到了 gt:field
,但我不太确定如何在我的代码中解释它,因为它看起来不同。有人可以在正确的方向推动我。
控制器:
public function store(Request $request)
{
// $energy = new Maintenance;
$energy = new VehicleLog();
$energy->start_odo = $request->input('start_odo');
$energy->end_odo = $request->input('end_odo');
$energy->km = $request->input('end_odo') - $request->input('start_odo');
$energy->save();
return redirect('/vmaintenance')->with('success', 'data added');
}
我的看法:
<div class="mb-3" style="float:left;" style="margin-left: 200px;">
<label for="recipient-name" style="width: 7em"class="col-form-label">Start ODO</label>
<input type="number"style="width: 7em" name="start_odo" class="form-control" id="recipient-name" min="0" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">End ODO</label>
<input type="number" style="width: 7em" name="end_odo" class="form-control" id="recipient-name" min="0" required>
</div>
阅读时看到的验证码:
$request->validate([
'detail' => 'gt:20',
]);
你必须自己弄清楚如何编写代码。有很多关于此的答案和教程。但是我添加这个答案是为了让你开始。
在您的存储方法中,在保存到数据库之前验证数据。
public function store(Request $request)
{
// validation logic
$request->validate([
'start_odo' => 'required',
'end_odo' => 'required|gt:start_odo',
]);
// if validation passes this will now store values in db
$energy = new VehicleLog();
$energy->start_odo = $request->input('start_odo');
$energy->end_odo = $request->input('end_odo');
$energy->km = $request->input('end_odo') - $request->input('start_odo');
$energy->save();
return redirect('/vmaintenance')->with('success', 'data added');
}
现在探索文档如何在表单中显示验证错误以及验证数据的其他方法。
正如@zahidhasanemon 已经指出的那样。您可以通过海关规则来实现。第一步是在您的 AppServiceProvider 中定义新的验证规则。
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('greater_than_field', function($attribute, $value, $parameters, $validator) {
$min_field = $parameters[0];
$data = $validator->getData();
$min_value = $data[$min_field];
return $value > $min_value;
});
Validator::replacer('greater_than_field', function($message, $attribute, $rule, $parameters) {
return str_replace(':field', $parameters[0], $message);
});
}
}
然后您可以像这样在您的控制器中使用这个新的验证规则:
$request->validate([
// other validations rules
'end_odo' => 'required|greater_than_field:start_odo',
]);
我有一个表格,其中有一个 start_odo
和一个 end_odo
用于用户需要输入的车辆里程跟踪。问题是目前,他们可以输入高于 end_odo
的 start_odo
,这会导致负差值。有什么方法可以确保 end_odo
总是更高?
作为 Laravel 的新手,我读到了 gt:field
,但我不太确定如何在我的代码中解释它,因为它看起来不同。有人可以在正确的方向推动我。
控制器:
public function store(Request $request)
{
// $energy = new Maintenance;
$energy = new VehicleLog();
$energy->start_odo = $request->input('start_odo');
$energy->end_odo = $request->input('end_odo');
$energy->km = $request->input('end_odo') - $request->input('start_odo');
$energy->save();
return redirect('/vmaintenance')->with('success', 'data added');
}
我的看法:
<div class="mb-3" style="float:left;" style="margin-left: 200px;">
<label for="recipient-name" style="width: 7em"class="col-form-label">Start ODO</label>
<input type="number"style="width: 7em" name="start_odo" class="form-control" id="recipient-name" min="0" required>
</div>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">End ODO</label>
<input type="number" style="width: 7em" name="end_odo" class="form-control" id="recipient-name" min="0" required>
</div>
阅读时看到的验证码:
$request->validate([
'detail' => 'gt:20',
]);
你必须自己弄清楚如何编写代码。有很多关于此的答案和教程。但是我添加这个答案是为了让你开始。 在您的存储方法中,在保存到数据库之前验证数据。
public function store(Request $request)
{
// validation logic
$request->validate([
'start_odo' => 'required',
'end_odo' => 'required|gt:start_odo',
]);
// if validation passes this will now store values in db
$energy = new VehicleLog();
$energy->start_odo = $request->input('start_odo');
$energy->end_odo = $request->input('end_odo');
$energy->km = $request->input('end_odo') - $request->input('start_odo');
$energy->save();
return redirect('/vmaintenance')->with('success', 'data added');
}
现在探索文档如何在表单中显示验证错误以及验证数据的其他方法。
正如@zahidhasanemon 已经指出的那样。您可以通过海关规则来实现。第一步是在您的 AppServiceProvider 中定义新的验证规则。
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('greater_than_field', function($attribute, $value, $parameters, $validator) {
$min_field = $parameters[0];
$data = $validator->getData();
$min_value = $data[$min_field];
return $value > $min_value;
});
Validator::replacer('greater_than_field', function($message, $attribute, $rule, $parameters) {
return str_replace(':field', $parameters[0], $message);
});
}
}
然后您可以像这样在您的控制器中使用这个新的验证规则:
$request->validate([
// other validations rules
'end_odo' => 'required|greater_than_field:start_odo',
]);