2017-09-26 77 views
0

我有一個複選框是這樣的:Laravel複選框驗證,始終爲空?

<div class="form-group"> 
    <div style="display:none ;" class="weekday_message form-control alert-warning"></div> 
    <label id="weekday2" for="weekday" class="col-md-4 control-label">Weekday</label> 
    <div class="required form-field" name="weekday" id="weekday"> 
    <input class="weekday" type="checkbox" name="weekdays[]" value="MO">Monday 
    <input class="weekday" type="checkbox" name="weekdays[]" value="TU">Tuesday 
    <input class="weekday" type="checkbox" name="weekdays[]" value="WE">Wednesday 
    <input class="weekday" type="checkbox" name="weekdays[]" value="TH">Thursday 
    <input class="weekday" type="checkbox" name="weekdays[]" value="FR">Friday 
    <input class="weekday" type="checkbox" name="weekdays[]" value="SA">Saturday 
    <input class="weekday" type="checkbox" name="weekdays[]" value="SU">Sunday 
    </div> 
    <span class="help-block"> 
     <strong></strong> 
</span> 
    </div> 

我的驗證:

public function rules() 
    { 
     return [ 
      'startdate' => 'required|date', 
      'endate' => 'nullable|date', 
      'startime' => ['required', new Time], 
      'endtime' => ['required', new Time], 
      'title' => 'required', 
      'entity_id' => 'required', 
      'type' => 'required|exists:entities,type', 
      'description' => 'required', 
      'frequency' => 'required', 
      'interval' => 'nullable|numeric', 
      'monthday' => 'nullable|numeric|min:1|max:3', 
      'weekdays' => 'array|max:3', 
      'month' => 'nullable|numeric', 
      'until' => 'nullable|date', 
      'tags' => 'nullable', 
     ]; 
    } 

和控制器:

public function storeEvent(EventRequest $request) 
{ 
    $test = ($request->input('weekdays')); 
    dd($test); 
    $weekday_string = implode(",", $request->input('weekdays')); 
    $request->merge(array('weekday', $weekday_string)); 
    dd($request->all()); 
    $event = DirtyEvent::create($request->all()); 
    $geoloc_id = Entity::find($event->entity_id) 
     ->first(); 
    $user_id = Auth::id(); 
    // Save Geoloc + user id into newly created event 
    $event->_geoloc()->associate($geoloc_id); 
    $event->users()->associate($user_id); 
    $event->save(); 

現在,驗證似傳,因爲它的數據轉儲,但是這兩個dd($ test)以及$ request-> all()會讓我回到空的平日,就像它不會被定義一樣。這可能是什麼原因?

+0

您是否有任何複選框在表格中被選中?據我所知,一個未經檢查的複選框不會傳遞給請求輸入。 – lesssugar

+0

ofc我有,我在表格過程中檢查了所有人 –

+0

你的HTML表示'weekday'(單數),但在你的規則集中是'weekdays'(複數)。我將這添加到我的答案中。 – Camilo

回答

0

如果你想確保你總是至少一個工作日的選擇,你應該改變:

'weekdays' => 'array|max:3', 

到:

'weekdays' => 'array|required|max:3', 

而且我想你不使用標準的HTML數據發送形式,因爲你設置了例如div的名稱,所以也許你忘了附上工作日或在其他地方的代碼有錯誤?

+0

我使用ajax發送它們,事情是我試圖按照'required'的要求來做,而有趣的是它沒有返回任何錯誤 –

+0

所以看看你的瀏覽器控制檯並確認發送了什麼。你怎麼知道它沒有返回任何驗證錯誤?您是否已在控制檯中驗證它? –

+0

然而,我正在做ajax,數據form.serialize:這可能是原因? –

0

您的HTML表示weekday(單數),但您的規則集說weekdays(複數)。

需要至少選中一個複選框,以使輸入weekdays包含在請求中。您可以使用默認值,以防在複選框之前添加隱藏輸入而未選中任何值。

<input type="hidden" name="weekdays" value="defaultValue">