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.
我试图仅在日期字段存在时验证它。在我从 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.