簡體   English   中英

確保 Laravel 中的一個輸入字段大於另一個

[英]Making sure one input field is greater than the other in Laravel

我有一個表單,它有一個start_odo和一個end_odo用於用戶需要輸入的車輛里程跟蹤。 問題是,目前,他們可以進入start_odo比越高end_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', 
]); 

你必須自己弄清楚如何編寫代碼。 有很多關於此的答案和教程。 但是我添加這個答案是為了讓你開始。 在您的 store 方法中,在保存到數據庫之前驗證數據。

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', 
]); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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