You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel控制器中结合type字段添加ldate日期验证规则的需求

解决方案

你可以利用Laravel的条件验证规则实现这个需求,下面提供两种可行的实现方式:


方式一:使用Rule::when()动态添加规则

首先需要引入验证规则类:

use Illuminate\Validation\Rule;

修改后的验证代码如下:

$eldate = Carbon::now()->addDay(4)->format('Y-m-d');

$validatedData = $this->validate($request, [
    'ldate' => [
        'required',
        'date',
        'unique:leaves,ldate,NULL,employee,employee,'.auth()->id(),
        // 当type等于2时,要求ldate必须晚于$eldate
        Rule::when($request->type == 2, 'after:'.$eldate)
    ],
    'ldate2' => 'nullable|date|after_or_equal:ldate',
    'type' => 'required'
]);

说明

  • Rule::when()会根据第一个参数的条件动态添加验证规则:当type等于2时,自动启用after:{$eldate}规则,限制ldate必须晚于指定日期。
  • 如果允许ldate等于$eldate,可以把after替换为after_or_equal。

方式二:使用闭包自定义验证逻辑

这种方式可以自定义错误提示信息,灵活性更高:

$eldate = Carbon::now()->addDay(4)->format('Y-m-d');

$validatedData = $this->validate($request, [
    'ldate' => [
        'required',
        'date',
        'unique:leaves,ldate,NULL,employee,employee,'.auth()->id(),
        function ($attribute, $value, $fail) use ($request, $eldate) {
            if ($request->type == 2 && strtotime($value) <= strtotime($eldate)) {
                $fail('当类型为2时,请假日期必须晚于'.$eldate);
            }
        }
    ],
    'ldate2' => 'nullable|date|after_or_equal:ldate',
    'type' => 'required'
]);

内容的提问来源于stack exchange,提问作者Sona Rijesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 16:04:56