上下文:当用户创建新会议时,他需要选择会议的开始和结束日期,并且用户需要在开始日期之后输入结束日期,即结束日期需要在开始日期之后。
为了正确处理这个逻辑,你知道我们是否可以在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>
答案 0 :(得分:1)
如documentation所述,您可以使用after
规则:
之后:日期
验证字段必须是给定日期之后的值。该 日期将传递给strtotime PHP函数:
而不是传递一个 要由strtotime评估的日期字符串,您可以指定另一个 要与日期进行比较的字段:
'start_date' => 'required|date|after:tomorrow'
'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:日期
验证字段必须是之后的值 或等于给定日期。有关更多信息,请参阅后规则。