自定义验证在 Laravel 5.4 中不起作用

Custom validation not working in Laravel 5.4

正在开发 Laravel 应用程序,其中正在处理两个日期的后端验证。 2个日期分别主要是departureDate和returnDate。

在出发日期,我试图验证它是否是必需的,应该是日期类型,并且应该是今天之后的日期。在 return 日期,我还尝试实施验证逻辑,据此 return 日期应在出发日期后 3 天或更长时间,但应在出发日期后不到 180 天。

验证函数

 public function validateDates(Request $request){   
        //dd($request->all());
     $now = new \DateTime();

    $after_date = $now->parse($this->departureDate)->addDays(3);
    $maxdays = $now->parse($this->departureDate)->addDays(180);

        $validation = $this->validate($request, [
          'departureDate' => 'required|date|after:now',
          'returnDate' => 'required|date_format:"Y-m-d"|after:' . $after_date->toDateString().'|before:' . $maxdays->toDateString()
        ], 
        [
            'departureDate.after' => 'Your departure date should be tomorrow or any date in the future',
           'returnDate.after' => 'Your return date should be 3 or more days after the departure date',
           'returnDate.before' => 'Your return date should be no more than 180 days from the departure date',
        ]
    };

我觉得你的逻辑没问题。但是,您可能希望改用 Carbon。它有您正在寻找的 parse() 方法。还有 addDays()toDateString().

因此,在文件顶部添加以下语句:

use Carbon\Carbon; 

然后将您的 validateDate() 方法更改为此方法:

public function validateDates(Request $request)
{   
    $after_date = Carbon::parse($this->departureDate)->addDays(3)->toDateString();
    $max_days   = Carbon::parse($this->departureDate)->addDays(180)->toDateString();

    $validation = $this->validate($request, 
        [
            'departureDate' => 'required|date|after:now',
            'returnDate'    => 'required|date_format:"Y-m-d"|after:' . $after_date . '|before:' . $max_days
        ], 
        [
            'departureDate.after' => 'Your departure date should be tomorrow or any date in the future',
            'returnDate.after'    => 'Your return date should be 3 or more days after the departure date',
            'returnDate.before'   => 'Your return date should be no more than 180 days from the departure date',
        ]
    );
};

我假设您在某处定义了出发日期,因此您使用的是 $this->departureDate,但如果它来自您的请求,您应该将其更改为 $request->departureDate 例如。