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

Laravel 5.4 sometimes validation rules not working

我试图仅在日期字段存在时验证它。在我从 Laravel 5.2 升级到 5.4

之前它工作正常

在 Laravel 5.2 中,此规则工作正常:

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

}

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

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

}

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

我不明白为什么 Laravel 改变了之前有效的东西!!!

这个问题是因为 \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class in Http\Kernel.php.

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

可以用nullable

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

}

来自Laravel docs

nullable

The field under validation may be null. This is particularly useful when validating primitive such as strings and integers that can contain null values.