[英]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',
]);
如果選擇框的值為整數,則可以將required
與integer
一起使用,例如
$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.