2016-11-22 170 views
3

我想验证给定的演讲。有一些验证规则,但我想用验证函数以某种方式扩展它,该验证函数以3个属性作为参数,并检查数据库中的其他讲座,并且如果没有讲座重叠,则返回有效。讲座已经开始,结束DateTime属性。Laravel验证整个请求

验证功能

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

我不知道如何以及在哪里把这个功能,所以Laravel的验证抛出异常,我可以用国际化指定的错误消息。

谢谢

回答

1

查阅有关自定义验证规则的文档。

从创建规则来specifiying错误信息,有一个完整为例有:

Laravel custom validation rules documentation

对于你的情况,你可以从验证方法的要求取的参数。

我想,即使其它参数没有设置仍然会出现验证规则,不要忘记检查,如果他们是在请求

+0

我读,但我想给它既不请求的属性。我想在验证所有验证规则后运行该函数。但我不想格式化422 - 我自己无法处理的实体(所以在验证挂钩不适用后)。 –

+0

您正在通过请求传递'$ end'' $ end'' $ hall'吗?只需在自定义验证规则中获取您的请求即可获取您的参数并使用您的功能 – Vuldo