Php Laravel将请求作为一个整体进行验证

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); }

我想验证所给的讲座。有一些验证规则,但我想用验证函数对其进行扩展,该函数将3个属性作为参数,并检查数据库中的其他课程,如果没有课程重叠,则返回valid。讲座具有开始、结束日期时间属性

验证功能是

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
?只需在自定义验证规则中获取您的请求,以获取您的参数并使用您的函数