为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel:如何使用验证规则之前和之后验证两个可选日期字段

Laravel:如何使用验证规则之前和之后验证两个可选日期字段

PHP
长风秋雁 2022-07-29 10:41:18
我正在尝试验证日期字段,以便active_from需要是 active_until 之前的日期,而active_until需要是active_from之后的日期。这两个字段都被隐藏和禁用,直到用户在名为active的选择字段上选择 Yes 。当用户选择“是”时,active_from出现并变为必需,并且active_until也出现,但它是可选的,这就是我的问题,因为只要active_until未填充,验证就会失败。据我了解,如果该字段可能会或可能不会启用/存在,我应该使用有时规则,该规则仅在该字段存在且已启用时检查其他验证。例如'active_from' => 'sometimes|required_if:active,yes|date|before:active_until',如果一个字段可能会或可能不会被填充,则应该使用可为空规则,但如果该字段可能存在或可能不存在,是否也应该使用它?例如'active_until' => 'sometimes|nullable|date|after:active_from',所以我的问题是如何检查active_from是否在active_until之前,只有当active被选择为Yes并且只有active_until被填充时。我是否正确使用了规则,active_from应该只使用有时规则还是也应该使用可空规则?代码:$validated = $request->validate([    'title' => 'required|string|min:3|max:30|unique:categories',    'description' => 'nullable|string|min:3|max:255',    'active' => 'required|in:yes,no',    'active_from' => 'sometimes|required_if:active,yes|date|before:active_until',    'active_until' => 'sometimes|nullable|date|after:active_from',    'highlighted' => 'sometimes|required_if:active,yes|in:yes,no',    'highlighted_from' => 'sometimes|required_if:highlighted,yes|date|before:highlighted_until',    'highlighted_until' => 'sometimes|nullable|date|after:highlighted_from',]);
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

对于复杂的验证规则


    use Illuminate\Support\Facades\Validator; 


    .... 

    $data = $request->all();

    $validator = Validator::make($data,[

       //...your unconditional rules goes here

    ]);


    //your conditional rules goes here

    $validator->sometimes('active_form', 'before:active_until', function ($request) {

        return $request->filled('active_until');//if here return true,rules will apply

    }); 

重要链接

条件添加规则
检索输入

查看完整回答
反对 回复 2022-07-29
?
GCT1015

TA贡献1827条经验 获得超4个赞

我终于能够弄清楚了。


这是我的固定代码:


$validated = $request->validate([

    'title' => 'required|string|min:3|max:30|unique:categories',

    'description' => 'nullable|string|min:3|max:255',

    'active' => 'required|in:yes,no',

    'active_from' => 'required_if:active,yes|date',

    'active_until' => 'nullable|date|after:active_from',

    'highlighted' => 'required_if:active,yes|in:yes,no',

    'highlighted_from' => 'required_if:highlighted,yes|date',

    'highlighted_until' => 'nullable|date|after:highlighted_from',

]);

即使用户在活动选择上选择“是”,我也不需要检查两个日期是可选的,我只需要检查active_until日期(可选的日期)以查看它是否是active_from日期之后的有效日期。


这样,即使用户没有填写active_until日期,验证也不会失败,因为我在该字段上有可为空的规则。


至于有时规则,据我了解,仅当请求中可能存在或不存在字段时才需要使用它,例如


'active' => 'sometimes|required|in:yes,no',


这样,仅当它存在于请求中时才需要它,但由于我在我的代码中使用 required_if,所以它不是必需的,因为它取决于其他字段的值。


查看完整回答
反对 回复 2022-07-29
  • 2 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信