Laravel Timestamp验证:如何确保starts_at和expires_at为有效时间戳?
如何确保starts_at和expires_at为有效时间戳?
你可以通过以下几种方式强化验证规则,确保这两个字段是有效的Unix时间戳:
方法1:使用Laravel自带的date:U验证规则
Laravel的date验证规则支持指定格式为U(代表Unix时间戳),会自动校验输入的整数能否转换为合法的日期时间,避免无效的超大/超小整数通过验证。修改后的规则如下:
$rules = [ 'user_id' => 'required|int|exists:users,id', 'starts_at' => 'required|date:U|min:1', 'expires_at' => 'required|date:U|gt:starts_at', ];
如果需要额外限制时间范围(比如开始时间必须在当前时间之后),可以添加after:now这类规则:
'starts_at' => 'required|date:U|after:now', 'expires_at' => 'required|date:U|after:starts_at',
方法2:自定义验证规则(适合特殊业务需求)
如果需要更灵活的校验逻辑(比如限制时间戳不能超过未来10年),可以使用闭包或自定义规则:
use Carbon\Carbon; $rules = [ 'user_id' => 'required|int|exists:users,id', 'starts_at' => [ 'required', 'int', 'min:1', function ($attribute, $value, $fail) { // 验证是否为有效时间戳,同时限制不能早于当前时间 $timestamp = Carbon::createFromTimestamp($value); if (!$timestamp->isValid() || $timestamp->lt(Carbon::now())) { $fail($attribute . ' 必须是有效的、不早于当前时间的时间戳'); } }, ], 'expires_at' => [ 'required', 'int', 'gt:starts_at', function ($attribute, $value, $fail) { $timestamp = Carbon::createFromTimestamp($value); if (!$timestamp->isValid()) { $fail($attribute . ' 必须是有效的时间戳'); } }, ], ];
这种方式可以根据业务需求定制校验逻辑,比如添加时间范围限制、时区校验等。
内容的提问来源于stack exchange,提问作者EA_Hub
相关产品推荐
相关产品推荐

