18

我正在尝试仅在日期字段存在时才对其进行验证。在我从 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 改变了以前工作的东西!!!

4

1 回答 1

46

出现问题是因为 Http\Kernel.php 中的 \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class。

当您提交空日期字段时,此中间件会将空字符串转换为 null。然后验证返回无效日期错误。您可以查看文档以获取更多详细信息。

它可以用nullable来修复

public function rules()
{
    return [
        'available_from' => 'sometimes|nullable|date',
    ];

}

来自Laravel 文档

可为空的

验证中的字段可能为空。这在验证可以包含空值的字符串和整数等原语时特别有用。

于 2017-02-04T13:46:34.750 回答