Php Laravel将请求作为一个整体进行验证
我想验证所给的讲座。有一些验证规则,但我想用验证函数对其进行扩展,该函数将3个属性作为参数,并检查数据库中的其他课程,如果没有课程重叠,则返回valid。讲座具有开始、结束日期时间属性 验证功能是Php Laravel将请求作为一个整体进行验证,php,validation,laravel-5,Php,Validation,Laravel 5,我想验证所给的讲座。有一些验证规则,但我想用验证函数对其进行扩展,该函数将3个属性作为参数,并检查数据库中的其他课程,如果没有课程重叠,则返回valid。讲座具有开始、结束日期时间属性 验证功能是 private function noOtherLecturesOnGivenTime($start, $end, $hall) { if(!$start instanceof Carbon) { $start = new Carbon($start); }
private function noOtherLecturesOnGivenTime($start, $end, $hall)
{
if(!$start instanceof Carbon) {
$start = new Carbon($start);
}
if(!$end instanceof Carbon) {
$end = new Carbon($end);
}
if(is_null($hall)) {
return true; // if there is no hall defined, all times are acceptable
}
if(!$hall instanceof Model) {
/** @var Hall $hall */
$hall = Hall::find($hall);
}
$overlappingLectures = $hall->lectures()->get()->filter(function ($lecture) use ($start, $end) {
// (Ts < e) and (Te > s)
return $start->lt($lecture->end) and $end->gt($lecture->start);
});
return $overlappingLectures->count() === 0;
}
私人功能Noother讲师通风设备($start、$end、$hall)
{
如果(!$start instanceof Carbon){
$start=新碳($start);
}
if(!$end instanceof Carbon){
$end=新碳($end);
}
如果(为空($hall)){
return true;//如果没有定义大厅,则所有时间都可以接受
}
if(!$hall实例(型号){
/**@var Hall$Hall*/
$hall=hall::查找($hall);
}
$overlappingtouchts=$hall->touchts()->get()->filter(函数($touch)use($start,$end){
//(Tss)
返回$start->lt($TEACH->end)和$end->gt($TEACH->start);
});
返回$count->count()==0;
}
我不知道如何以及在哪里放置这个函数,所以Laravel的验证器会抛出异常,我可以用i18n指定错误消息
谢谢查看有关自定义验证规则的文档 从创建规则到指定错误消息,这里有一个完整的示例: 对于您的情况,您可以在验证方法中从请求中获取参数
我认为即使没有设置其他参数,验证规则仍然会出现,请不要忘记检查它们是否在请求中我正在阅读,但我想将其赋予请求的两个属性。我希望在验证所有验证规则之后运行该函数。但我不想自己格式化422-不可处理实体(因此验证后挂钩不适用)。您正在通过请求传递
$end
$end
$hall
?只需在自定义验证规则中获取您的请求,以获取您的参数并使用您的函数