【问题标题】:Custom validation not working in Laravel 5.4自定义验证在 Laravel 5.4 中不起作用
【发布时间】:2019-06-21 10:25:16
【问题描述】:

在一个 Laravel 应用程序上工作,我正在处理两个日期的后端验证。 2个日期主要分别是departmentDate和returnDate。

在出发日期我试图验证它是必需的,应该是日期类型并且应该是今天之后的日期。在返回日期,我还尝试实现一个验证逻辑,即返回日期应在出发日期后 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',
        ]
    };

【问题讨论】:

  • 任何错误被抛出?
  • @Mozammil 我收到以下错误 Call to undefined method DateTime::parse()

标签: validation date laravel-5.4


【解决方案1】:

我认为你的逻辑很好。但是,您可能希望改用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,例如。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2018-08-21
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多