【问题标题】:Laravel validation rules for timeLaravel 时间验证规则
【发布时间】:2021-05-27 13:05:44
【问题描述】:

如果start_dateend_date 相等,我如何制定验证规则,仅验证end time 必须大于start time

    $rules = [
        'start_date' => 'required|date_format:Y-m-d',
        'end_date' => 'required|date_format:Y-m-d|after_or_equal:start_date',
            'start_time' => 'nullable|date_format:H:ia',
            'end_time' => 'nullable|date_format:H:ia|after:start_time'
        ];

【问题讨论】:

  • 您必须为此创建自定义验证。 documentation 向您解释了 after hook,您需要使用它。

标签: php laravel


【解决方案1】:

您可以为此创建自定义验证

<?php

namespace App\Rules;

use Carbon\Carbon;
use Illuminate\Contracts\Validation\Rule;

class EndTime implements Rule
{
    private $startDate;
    private $endDate;
    private $startTime;
    private $endTime;

    /**
     * Create a new rule instance.
     *
     * @param $startDate
     * @param $endDate
     * @param $startTime
     * @param $endTime
     */
    public function __construct($startDate,$endDate,$startTime,$endTime)
    {
        //
        $this->startDate = $startDate;
        $this->endDate = $endDate;
        $this->startTime = $startTime;
        $this->endTime = $endTime;
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        $startDate=Carbon::createFromFormat('Y-m-d',$this->startDate);
        $endDate=Carbon::createFromFormat('Y-m-d',$this->endDate);
        $startTime = Carbon::createFromFormat('H:ia',$this->startTime);
        $endTime = Carbon::createFromFormat('H:ia',$this->endTime);
        if($startDate==$endDate &&$endTime<$startTime){

            return false;
        }

        return true;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The validation error message.';
    }
}

在你的规则中

 $rules = [
        'start_date' => 'required|date_format:Y-m-d',
        'end_date' => 'required|date_format:Y-m-d|after_or_equal:start_date',
        'start_time' => 'nullable|date_format:H:ia',
        'end_time' => ['nullable', 'date_format:H:ia',new EndTime($request->start_date,$request->end_date,$request->start_time,$request->end_time)]
    ];

【讨论】:

    猜你喜欢
    • 2016-05-13
    • 2020-06-28
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2016-12-17
    • 2020-06-25
    • 2020-06-09
    • 2021-12-09
    相关资源
    最近更新 更多