【问题标题】:How to validate an array of datetimes in Laravel?如何在 Laravel 中验证日期时间数组?
【发布时间】:2021-06-01 13:17:06
【问题描述】:

我有一个提交名为prazos 的数组的表单,我想确保每个项目都是有效的日期时间或空值。在the answers to this questionLaravel docs 之后,我的控制器中有这个:

use Illuminate\Support\Facades\Validator;

// ...

$rules = array([
            'prazos' => 'required|array',
            'prazos.*' => 'nullable|date'
           ]);

$validator = Validator::make($request->all(), $rules);
$data = $validator->valid()['prazos'];
foreach($data as $id => $prazo) {
    // use $data to update my database
    // ...
}

问题是,验证器实际上并没有停止无效内容。如果我尝试提交“loldasxyz”或其他乱码,我会从数据库中收到错误消息。我做错了什么?

注意:以前我一直在使用语法为 $data = $request->validate($rules) 的验证器,但由于某种原因,它不适用于数组类型的数据($data 返回为空)。我不确定这些不同方法的工作方式是否有所不同。

编辑:这是$request 中的参数包在我测试时的样子(索引是 id,这就是它们从 1 开始的原因):

    #parameters: array:3 [▼
      "_token" => "Rf6mAp4lqhpZzQRxaxYsees1M0NfrFKpbGe4Hy28"
      "_method" => "PUT"
      "prazos" => array:5 [▼
        1 => "2021-03-22 21:21"
        2 => "2021-03-03 11:27"
        3 => "jhbkjhg"
        4 => null
        5 => "2021-03-02 14:21"
      ]
    ]

这就是经过验证的$data 的结果:

array:5 [▼
  1 => "2021-03-22 21:21"
  2 => "2021-03-03 11:27"
  3 => "jhbkjhg"
  4 => null
  5 => "2021-03-02 14:21"
]

我希望它会告诉我第三个值无效。

【问题讨论】:

  • 添加您的请求,看看它是否以 prazos[0], prazos[1] 或您的输入以其他格式出现,我认为您应该 nullable 而不是 sometimes
  • 你是对的,因为没有缺失值,只有空值......完成。

标签: php laravel validation eloquent laravel-8


【解决方案1】:

以下是您要查找的内容: https://laravel.com/docs/8.x/validation#rule-date-equals

验证中的字段必须等于给定日期。日期将被传递到 PHP strtotime 函数中,以便转换为有效的 DateTime 实例。

【讨论】:

  • 这看起来只会验证特定日期。我想要任何有效的日期。
猜你喜欢
  • 2020-08-04
  • 2018-01-07
  • 2016-09-04
  • 2018-05-21
  • 2023-03-26
  • 2010-09-27
  • 2019-06-12
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多