我正在構建一個名冊系統作爲一個側面項目,並且在其中一個頁面上,您可以更改某人工作的常規時間。required_without_all驗證器一遍又一遍地重複出現錯誤消息
在頁面上,我有一個星期的每一天的複選框,然後您可以通過並選擇該人工作的適當天數。
他們需要工作至少一天,所以至少有一個複選框需要在提交時進行檢查。
爲了測試這個,我使用了Laravel驗證器的required_without_all
規則。
它可以很好地工作,但是如果沒有選中框,它會將您重定向回7次並吐出相同的錯誤消息(因爲每週有7個複選框)。
我正在使用自定義錯誤消息,所以這就是爲什麼錯誤消息是相同的,但即使我沒有,我不會希望類似的錯誤消息反覆重複。
這是我的驗證的樣子:
$validator = Validator::make($request->all(), [
'mondayCheckbox' => 'required_without_all:tuesdayCheckbox,wednesdayCheckbox,thursdayCheckbox,fridayCheckbox,saturdayCheckbox,sundayCheckbox',
'tuesdayCheckbox' => 'required_without_all:mondayCheckbox,wednesdayCheckbox,thursdayCheckbox,fridayCheckbox,saturdayCheckbox,sundayCheckbox',
'wednesdayCheckbox' => 'required_without_all:mondayCheckbox,tuesdayCheckbox,thursdayCheckbox,fridayCheckbox,saturdayCheckbox,sundayCheckbox',
'thursdayCheckbox' => 'required_without_all:mondayCheckbox,tuesdayCheckbox,wednesdayCheckbox,fridayCheckbox,saturdayCheckbox,sundayCheckbox',
'fridayCheckbox' => 'required_without_all:mondayCheckbox,tuesdayCheckbox,wednesdayCheckbox,thursdayCheckbox,saturdayCheckbox,sundayCheckbox',
'saturdayCheckbox' => 'required_without_all:mondayCheckbox,tuesdayCheckbox,wednesdayCheckbox,thursdayCheckbox,fridayCheckbox,sundayCheckbox',
'sundayCheckbox' => 'required_without_all:mondayCheckbox,tuesdayCheckbox,wednesdayCheckbox,thursdayCheckbox,fridayCheckbox,saturdayCheckbox',
'effective_from' => 'date',
], [
'mondayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'tuesdayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'wednesdayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'thursdayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'fridayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'saturdayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'sundayCheckbox.required_without_all' => 'Surely they are working at least one day!',
'effective_from.date' => 'You have provided an invalid date for when their hours are effective from!',
]);
if ($validator->fails())
{
return Redirect::back()
->withErrors($validator)
->withInput();
}
所以,如果沒有框是在提交檢查,錯誤Surely they are working at least one day!
如圖7倍。
我喜歡這個頁面上顯示的錯誤:
@if (count($errors) > 0)
<div class="alert alert-danger">
<p><b>There were some problems:</b></p>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
反正有沒有隻得到它顯示一次?
怎麼樣一個小黑客?使用jQuery或Javascript,如果任何複選框被選中,您可以設置隱藏輸入的值,否則值爲無。因此,現在在您的驗證器中,您可以檢查隱藏的輸入字段,然後根據該字段進行響應。這將只顯示一條消息。 –
來自required_without_all的文檔:「只有當所有其他指定字段不存在時,驗證字段必須存在」。所以從技術上講,這可能不是以「不」開頭的理想驗證者?你是否開心使用自定義驗證器功能,我們可以採取刺探的方式。這樣比這更容易。 – Theson
@JilsonThomas我對一個小小的黑客開放,我的JavaScript/jQuery知識不是很好 - 你能告訴我一個如何做到這一點的例子嗎? @ihatehandles'required_without_all'似乎非常適合,例如其中一個字段需要存在,當其他指定字段都不存在時。我非常樂意嘗試創建一個自定義的 - 你將如何解決這個問題? – James