两个日期的 Laravel 自定义验证

Posted

技术标签:

【中文标题】两个日期的 Laravel 自定义验证【英文标题】:Laravel Custom Validation of Two Dates 【发布时间】:2019-03-18 06:08:58 【问题描述】:

我正在 Laravel 中创建一个包含两个字段的表单:departure-datereturn-date。我正在尝试创建自定义验证逻辑,其中输入的出发日期必须在用户填写表格后的同一天或任何其他日期。 return-date 也应该在 departure date 之后。请帮忙?

表单布局

<!-- Departure date-->
<div class="form-line registar2 love  $errors->has('departure_date') ? ' has-error' : '' ">
    <input type="date" class="form-input" name="departure_date" value=" old('departure_date') " required>
    <label>Departure Date *</label>
    <div class="error-label">Field is required!</div>
    <div class="check-label"></div>
    @if ($errors->has('departure_date'))
        <span class="help-block">
            <strong> $errors->first('departure_date') </strong>
        </span>
    @endif
</div>
<!--End departure-->

<!-- Return date-->
<div class="form-line registar2 move  $errors->has('return_date') ? ' has-error' : '' ">
    <input type="date" class="form-input" name="return_date" value=" old('return_date') " required>
    <label>Return Date *</label>
    <div class="error-label">Field is required!</div>
    <div class="check-label"></div>
    @if ($errors->has('return_date'))
        <span class="help-block">
            <strong> $errors->first('return_date') </strong>
         </span>
    @endif
</div>
<!-- End return date-->

控制器中的验证

public function validatePlanEntries(Request $request)

    $validation = $this->validate($request, [
            'departure_date' => 'required',
            'return_date' => 'required'
        ]
    );

【问题讨论】:

【参考方案1】:
    public function validatePlanEntries(Request $request)
    
        $validation = $this->validate($request, [
            'departure_date' => 'required|date|after:now',
            'return_date' => 'required|date|after:departure_date',
        ]
        );
    

仅供参考:after:xxxxx 规则要么与另一个输入字段进行比较,要么尊重原生 DateTime php 类的规则。所以你可以输入after:now +2 hours

要覆盖消息并编写自己的消息,请创建一个 messages() 函数,如下所示:

public function messages()

    return [
        'departure_date.required' => 'Departure date is required',
        'departure_date.after' => 'Please choose a date in the future',
        'return_date.required'  => 'Return date is required',
        'return_date.after' => 'Your return date is before departure'
    ];

如果您正在寻找一个 jquery 解决方案来使日期选择更加用户友好且错误更少,您可以查看Bootstrap Datepicker,这可能是值得的。祝你的项目好运!

【讨论】:

非常感谢您的帮助,如何添加自定义错误消息以显示给用户 好吧,非常感谢,如果我在验证对象中添加另一个数组而不是另一个函数,它是否适用public function validatePlanEntries(Request $request) $validation = $this-&gt;validate($request, [ 'departure_date' =&gt; 'required|date|after:now', 'return_date' =&gt; 'required|date|after:departure_date' ], [ 'departure_date.after' =&gt; 'Choose a day after today', 'return_date.after' =&gt; 'Choose a day after departure date' ] ); 我不这么认为。但是您可以使用 artisan 命令 make:request 创建单独的验证规则,并在需要时调用这些文件。欲了解更多信息,请查看laravel.com/docs/5.7/validation#form-request-validation 好的,非常感谢

以上是关于两个日期的 Laravel 自定义验证的主要内容,如果未能解决你的问题,请参考以下文章

MVC 自定义验证:比较两个日期

laravel 5.1 中的日期验证

Laravel 5 自定义验证 - 自定义 MySQL 查询

Laravel 自定义验证规则

表单请求验证中的 Laravel“独特”自定义消息验证

Laravel - 在自定义验证中使用验证规则