当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.2验证规则顺序

叶英哲
2023-03-14

我做了一个自定义验证规则,它迭代一个包含键日期的对象数组,并检查这些日期是否连续(日期之间的差异仅为1天)。为此,我需要填写“day”键并具有正确的日期格式。我将date\u格式validator规则放在day键中,但由于我的自定义规则在数组字段中,如果我没有给他正确的date\u格式(例如随机字符串),它就会崩溃。也许你能更好地理解代码。

自定义验证器规则

Validator::extend('consecutive_dates', function($attribute, $value, $parameters, $validator) {
    // Order the in the array with the 'day' value
    usort($value, array($this, 'compare_dates'));
    $previous_date = null;
    foreach ($value as $date) {
    // Check if dates are consecutives
        $current_date = new DateTime($date['day']);
        if ($previous_date !== null) {
            $interval = $current_date->diff($previous_date);
            if ($interval->days !== 1) {
                // If not, fails
                return false;
            }
        }
        $previous_date = $current_date;
    }
    return true;
);

规则定义

'dates.*.day' => 'required_with:dates|date_format:Y-m-d',
'dates' => 'bail|array|filled|consecutive_dates',

现在,如果我尝试验证以下内容:

"dates": [{
    "day": "fdsa",
}]

它会崩溃然后说

DateTime::__construct(): Failed to parse time string (fdsa) at position 0 (f): The timezone could not be found in the database

问题是:有没有一种方法可以让Laravel首先验证”日期。*。日期“必须具有日期\u格式:Y-m-d以便在自定义验证时不会失败?


共有1个答案

皇甫逸清
2023-03-14

您应该首先检查给定值是否为有效日期,如下所示

if (Carbon::createFromFormat('date format', $date['day']) !== false) {
        // valid date
}

我希望这会有所帮助。

 类似资料:
  • 验证规则的定义通常有两种方式,如果你使用了验证器的话,通常通过rule属性定义验证规则,而如果使用的是独立验证的话,则是通过rule方法进行定义。 属性定义 属性定义方式仅限于验证器,通常类似于下面的方式: <?php namespace app\index\validate; use think\Validate; class User extends Validate { prot

  • 我正在尝试验证密码字段是否存在。我想允许某人编辑用户,他们可能想更改用户密码,也可能不想更改用户密码。所以我想我可以使用Laravels验证规则,特别是“有时”规则来实现这一点。我有一套规则: 例如,对于其他字段,通常会有其他规则,而对于密码,则会有更严格的规则。如果传递的数据中存在密码字段,我希望这只应用min:8规则,但是如果我将密码字段留空,则会出现一个验证错误,表明密码字段是必需的。 我不

  • 如何在验证器中添加密码验证规则? 验证规则: 密码包含以下五个类别中至少三个类别的字符: 英文大写字符(A–Z) 英文小写字符(a–z) 以10位数字(0–9)为基数 非字母数字(例如:!、$、#或%) Unicode字符 如何在验证器规则中添加上述规则? 我的代码在这里

  • 我正在用Xtext创建一个DSL,用于生成图像。然而,由于我对Xtext完全不了解,我遇到了一些问题,希望您能给我一些指导。 最终,我希望用户使用以下编码结构: 我在Xtext中想到了以下内容(我没有对MWE2做任何更改): 我需要解决几个问题,但我想知道解决这些问题的最佳方法是什么。 如何为终端规则SIZE中使用的INT设置边界。 如何设置bgColor:或bgsize:只能使用一次? 如何设置

  • 本文向大家介绍laravel 数据验证规则详解,包括了laravel 数据验证规则详解的使用技巧和注意事项,需要的朋友参考一下 如下所示: 简单例子 特殊例子 以上这篇laravel 数据验证规则详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • BetterValidate 校验规则 类校验 对于参数的校验,Lin 提供了类校验这种便捷,好用的方式,它会 对ctx.request.body(上下文请求体)、ctx.request.query(上下文请求query参数)、ctx.request.header(上下文请求头)、ctx.param(路由参数)这些参数进行统一校验 ,所以请保证你的参数名没有重复。 代码演示: class Regi