簡體   English   中英

如果未選擇任何選項,Laravel將忽略選擇輸入驗證

[英]Laravel ignores select input validation if no option is selected

我有一個表單,其中包含一些字段,我想使用Laravel的validate()方法進行validate()

public function postSomething(Request $req) {

    ...

    $this->validate($req, [
        'text_input' => 'required',
        'select_input' => 'required'
    ]);

    ...

}

問題在於,如果提交表單時未從選擇輸入中選擇選項,則它會在請求中被忽略,盡管Laravel使用required驗證規則將其添加到規則集中,但Laravel不會對其required驗證。 空文本輸入已正確驗證。

+request: ParameterBag {#42 ▼
  #parameters: array:1 [▼
    "text_input" => ""
    "_token" => "TCDqEi2dHVQfmc9HdNf8ju1ofdUQS6MtDBpUMkl7"
  ]
}

如您所見,如果將select_input保留為空,則該參數將丟失。

這是我的選擇輸入的HTML代碼:

<select class="form-control" name="select_input">
    <option disabled selected>Please select...</option>
    <option value="val1">Value 1</option>
    <option value="val2">Value 2</option>
</select>

有沒有一種方法可以使驗證工作適用於規則集中的所有字段,即使其中的某些字段未出現在請求中?

從Laravel 5.1驗證文檔中:

需要

驗證中的字段必須存在於輸入數據中,並且不能為空。 滿足以下條件之一的字段被視為“空”:值為空。 該值為空字符串。 該值是一個空數組或一個空Countable對象。 該值是沒有路徑的上載文件。

PS我正在使用Laravel 5.1,因此present方法不可用。

您的html應該看起來像這樣

<select class="form-control" name="select_input">
    <option value="" selected >Please select...</option>
    <option value="val1">Value 1</option>
    <option value="val2">Value 2</option>
</select>

$this->validate($req, [
        'text_input' => 'required',
        'select_input' => 'required',
    ]);

如果選擇框的值為整數,則可以將requiredinteger一起使用,例如

$this->validate($req, [
    'text_input' => 'required',
    'select_input' => 'required|integer',
]);

或者,如果該選擇框的選項有限,則可以使用

'select_input' => "required|in:val1,val2,val3",

您已將其選項設置為禁用,因此它不會通過您的表單發送任何內容。

將選擇框更改為

<select class="form-control" name="select_input">
    <option value="">Please select...</option>
    <option value="val1">Value 1</option>
    <option value="val2">Value 2</option>
</select>

我可以推薦幾種選擇:

  • 手動驗證請求,而無需使用Controller中擴展的驗證,即:

     //validator FACADE $ validator = Validator::make ($request->all(), [ // rules here ]); 

    這樣,您可以監視哪些字段被傳遞,哪些字段未被傳遞。

  • 其次,為選擇列表設置一個默認值,並在Controller中進行驗證時檢查該值,即,如果您具有此默認值,則什么也不會選擇。 您絕對只有在Controller中提交的字段。

暫無
暫無

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

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