Laravel 5.4 有时验证规则不起作用

Posted

技术标签:

【中文标题】Laravel 5.4 有时验证规则不起作用【英文标题】:Laravel 5.4 sometimes validation rules not working 【发布时间】:2017-06-21 17:17:09 【问题描述】:

我正在尝试仅在日期字段存在时对其进行验证。在我从 Laravel 5.2 升级到 5.4 之前它运行良好

在 Laravel 5.2 中,这条规则可以正常工作:

public function rules()

    return [
        'available_from' => 'date',
    ];


在 5.4 中它返回验证错误 The available from is not a valid date. 我尝试了这个新规则

public function rules()

    return [
        'available_from' => 'sometimes|date',
    ];


仍然出现同样的错误,似乎sometimes 规则根本不影响验证。我怎样才能摆脱这个错误?

我不明白为什么 Laravel 改变了以前工作的东西!!!

【问题讨论】:

您使用的日期格式是什么? 我使用这种格式YYYY-MM-DD 【参考方案1】:

问题是由于 Http\Kernel.php 中的 \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class 造成的。

当您提交空日期字段时,此中间件会将空字符串转换为 null。然后验证返回无效日期错误。您可以查看docs了解更多详情。

它可以用 nullable

来修复
public function rules()

    return [
        'available_from' => 'sometimes|nullable|date',
    ];


来自Laravel docs:

可空

验证中的字段可能为空。这个特别有用 当验证原语(如字符串和整数)时,可以 包含空值。

【讨论】:

很好的帮助。在 Laravel 5.6 中也能完美运行。 我收到相同的“不是有效日期”,而且我总是通过 Postman 发送“2018-03-05”之类的日期 你简直拯救了我的一天。

以上是关于Laravel 5.4 有时验证规则不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 - 图像验证不起作用

文本区域验证最大规则在 laravel 6 中不起作用

laravel 5.4 auth 外观不起作用

Laravel 5.4 - 拖放不起作用

Route::currentRouteAction 在 laravel 5.4 中不起作用

Laravel 5.4 Auth::User() 与关系不起作用