【问题标题】:Laravel validate request as a wholeLaravel 整体验证请求
【发布时间】:2016-11-22 09:19:21
【问题描述】:

我想验证给定的讲座。有一些验证规则,但我想用验证函数以某种方式扩展它,它以 3 个属性作为参数并检查数据库中的其他讲座,如果没有讲座重叠,则返回有效。讲座有开始、结束日期时间属性。

验证函数是

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 的验证器会抛出异常,我可以使用 i18n 指定错误消息。

谢谢

【问题讨论】:

    标签: php validation laravel-5


    【解决方案1】:

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

    从创建规则到指定错误消息,这里有一个完整的示例:

    Laravel custom validation rules documentation

    对于您的情况,您可以在验证方法中从请求中获取参数。

    我认为即使没有设置其他参数,验证规则仍然会发生,不要忘记检查它们是否在请求中

    【讨论】:

    • 我正在阅读该内容,但我不想将其提供给请求的两个属性。我想在验证所有验证规则后运行该函数。但我不想自己格式化 422 - Unprocessable Entity(所以验证钩子不适用之后)。
    • 您通过请求传递$end $end $hall 对吗?只需在自定义验证规则中获取您的请求即可获取您的参数并使用您的函数
    猜你喜欢
    • 2017-11-21
    • 2020-01-13
    • 2017-10-01
    • 2019-12-31
    • 2020-11-06
    • 2020-08-20
    • 2018-09-15
    • 2018-03-23
    • 2015-06-22
    相关资源
    最近更新 更多