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
相关产品推荐
相关产品推荐

