Laravel 5.4中日期的自定义验证

时间:2019-01-25 08:12:39

标签: date laravel-5.4 customvalidator

正在开发Laravel应用程序,从而正在进行两个日期的后端验证。这两个日期分别是出发日期返回日期

我已确认出发日期为必填日期,应为date类型,并且应为今天之后的日期。在返回日期,我已经确认需要这样做,应该是date类型,并且应该在出发日期之后3天或更长时间。所有这些验证逻辑都可以正常工作。

现在,我想实施一项验证,其中返回日期应在出发日期之后3天或更长时间,但应在出发日期之后不到180天

验证功能

public function validateDates(Request $request){   
    //dd($request->all());

    $validation = $this->validate($request, [
        'departureDate' => 'required|date|after:now',
        //Must be 3 days after departure date
        'returnDate' => ['required', 'date', 'returnDate_after:departureDate,3' ]
    ], 
    [
      'departureDate.after' => 'Your departure date should be tomorrow or any date in the future'
    ]
};

应用程序服务提供商中的自定义验证器,采用引导方式

public function boot(){
     //Custom Validation
        Validator::extend('valid_birth_date', 
            function ($attribute, $value, $parameters, $validator){
                $date_different = date_diff(new \DateTime($value), new \DateTime())->y;
                return $date_different >= 18;
        });

        //Deparrure and return date should have a difference of 3 days
        $validator = app()->make(\Illuminate\Validation\Factory::class);
        $validator->extend('return_date_after', function ($attribute, $value, $parameters, $validator) {
              $otherAttribute = array_get($parameters, 0);
              //default 4 days
              $days = array_get($parameters, 1, 3); 
              $otherValue = array_get($validator->getData(), $otherAttribute);
              if (strtotime($value) < strtotime($otherValue) + $days*24*60*60) {
                return false;
              }
              return true;
        });

        $validator->replacer('return_date_after', function ($message, $attribute, $rule, $parameters) {
              return 'Your return date should be '.array_get($parameters,1,3).' days or more after your '.array_get($parameters, 0);
       });
       //End departure and return date
}

0 个答案:

没有答案