未定义变量:请求,laravel 日期验证错误

Undefined variable: request, error on laravel date validation

在我的 laravel 应用程序中,我有一个用户注册表格

我有一个用户生日输入框。

我正在通过我的控制器验证用户输入。

生日用户年龄必须在18-70岁之间。

为了我的用户生日,我的前端有 d/m/Y 格式,但我在保存之前从我的控制器将其转换为 Y-m-d 格式。

if(!empty($request->date_of_birth)){

                $date = str_replace('/', '-', $request->date_of_birth);
                $new_bday=date("Y-m-d", strtotime($date) );
                $request->merge(['date_of_birth' => ''.$new_bday.'']);    

            }

现在的问题是,每次用户输入无效日期时 (12/11/2021)它都会验证并以错误的格式显示旧日期(之前选择的)(2021-11-12)

为了解决这个问题,我在我的控制器中将我的出生日期验证更改为以下

'date_of_birth'=>['required','bail','date_format:Y-m-d',function ($attribute, $value, $fail) {

                $age=Carbon::createFromFormat('Y-m-d', $value)->diff(Carbon::now())->y;
                if($age<18||$age>70){
                    $date = str_replace('-', '/', $value);
                    $new_bday=date("d/m/Y", strtotime($date) );
                    $request->merge(['date_of_birth' => ''.$new_bday.'']);
                    $fail('Âge invalide. l\'âge devrait être 18-70');
                }

            },]

但这一直给我一个错误说 Undefined variable: request

尝试像这样访问请求 \request() 而不是 $request

\request() 是一个帮助函数,returns 相同的请求对象,可以从您的应用程序的任何地方调用。

验证和提交日期有时也会导致一些问题。为此,我建议您考虑使用一些第三方工具,例如日期时间选择器或平面选择器。它可以更加用户友好,并且您可以确保从客户端以正确的格式输入日期。

参见:

getdatepicker.com/4

flatpickr.js.org/examples