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

Mun*_*han 15 laravel laravel-validation laravel-5.4

我正在尝试验证日期字段,只有它存在.在从Laravel 5.2升级到5.4之前,它工作正常

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

}
Run Code Online (Sandbox Code Playgroud)

仍然有相同的错误,似乎sometimes规则不会影响验证.我怎样才能摆脱这个错误?

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

iku*_*bic 35

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

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

它可以用nullable固定

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

}
Run Code Online (Sandbox Code Playgroud)

来自Laravel文档:

可空

验证字段可能为空.这在验证原语(如字符串和可包含空值的整数)时特别有用.