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

我正在尝试验证日期字段,以便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',

]);


长风秋雁
浏览 128回答 2
2回答

慕莱坞森

对于复杂的验证规则    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    }); 重要链接条件添加规则检索输入

GCT1015

我终于能够弄清楚了。这是我的固定代码:$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,所以它不是必需的,因为它取决于其他字段的值。
打开App,查看更多内容
随时随地看视频慕课网APP