如何验证此上下文?在验证方法()?

时间:2018-02-16 15:40:19

标签: laravel

上下文:当用户创建新会议时,他需要选择会议的开始和结束日期,并且用户需要在开始日期之后输入结束日期,即结束日期需要在开始日期之后。

为了正确处理这个逻辑,你知道我们是否可以在store方法中使用laravel validate方法,或者这不是一个好方法或者不能用这个方法吗?如果在验证方法中这样做不够,你知道如何正确地做到这一点吗?

ConferenceController商店方法:

public function store(Request $request)
 {
        $this->validate($request, [
            'conference_name' => 'required|max:255|string',
            'conference_startDate' => 'required|date_format:d/m/Y',
            'conference_endDate' => 'required|date_format:d/m/Y',
        ]);
        $conference = Conference::create([
            'nome' => $request->conference_name,
            'startDate' => Carbon::parse($request->conference_startDate),
            'endDate' => Carbon::parse($request->conference_endDate),
        ]);
    }

Html字段:

<div class="form-row">
    <div class="form-group col-md-6">
        <label for="conference_startDate">Stard Date</label>
        <div class="input-group date" data-provide="datepicker">
            <input type='text' onkeydown="event.preventDefault()"
                   name="conference_startDate" value="{{ old('conference_startDate') }}"
                   class="form-control" placeholder="DD/MM/YYY" />
            <span class="input-group-addon"><i class="fa fa-calendar text-primary" aria-hidden="true"></i></span>
        </div>
    </div>
    <div class="form-group col-md-6">
        <label for="conference_endDate">End Date</label>
        <div class="input-group date" data-provide="datepicker">
            <input type='text' class="form-control"
                   value="{{ old('conference_endDate') }}" name="conference_endDate" placeholder="DD/MM/YYY"/>
            <span class="input-group-addon"><i class="fa fa-calendar text-primary" aria-hidden="true"></i></span>
        </div>
    </div>
</div>

1 个答案:

答案 0 :(得分:1)

documentation所述,您可以使用after规则:

  

之后:日期

     

验证字段必须是给定日期之后的值。该   日期将传递给strtotime PHP函数:

     

'start_date' => 'required|date|after:tomorrow'

     而不是传递一个   要由strtotime评估的日期字符串,您可以指定另一个   要与日期进行比较的字段:

     

'finish_date' => 'required|date|after:start_date'

所以在你的代码中:

$this->validate($request, [
            'conference_name' => 'required|max:255|string',
            'conference_startDate' => 'required|date_format:d/m/Y',
            'conference_endDate' => 'required|date_format:d/m/Y|after:conference_startDate',
        ]);

另外,请检查this类似问题。

更新

docs所述,要查看等于另一个日期之后的日期,您应该使用:

  

after_or_equal:日期

     

验证字段必须是之后的值   或等于给定日期。有关更多信息,请参阅后规则。