2017-09-26 81 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">