Laravel 表单请求验证规则“必需”不适用于空值
Posted
技术标签:
【中文标题】Laravel 表单请求验证规则“必需”不适用于空值【英文标题】:Laravel Form Request Validation rule "required" not working with null values 【发布时间】:2021-07-20 21:34:07 【问题描述】:我有 Laravel/Vue 应用程序,我正在使用 axios 提交带有文件和其他一些数据的表单。
this.loading = true;
this.errors = ;
let formData = new FormData();
formData.append('type', this.type);
formData.append('file', this.file);
formData.append('date', this.date);
axios.post(`/file-upload`,
formData,
headers:
'Content-Type': 'multipart/form-data'
)
.then((response) =>
if (response.status === 200)
this.loading = false;
// Success..
)
.catch((error) =>
this.loading = false;
if (error.response.status === 422) // Laravel XHR Requests errors
this.errors = error.response.data.errors;
else
console.log(error);
);
在 Laravel 控制器中,我有带有表单请求验证器的存储方法
public function store(ImportRequest $request)
// Request is valid..
导入请求
public function rules()
return [
'type' => 'required',
'file' => 'required|mimes:xls,xlsx|file|max:512',
'date' => 'required|date',
];
在我的 vue 组件中,默认字段值为 null。当我提交空表单时,我预计验证将失败并返回需要字段的消息,但我得到的唯一错误是关于文件 mime、大小和日期。不需要什么...
Request Headers Form Data
从 Laravel 文档中,我了解到必需的规则必须返回错误。 “如果以下条件之一为真,则字段被视为“空”:值为空......” https://laravel.com/docs/8.x/validation#rule-required
目前我想到的唯一解决方案是在 javascript 中针对 null 检查值,并且只有在不为 null 时才添加到 FormData。在这种情况下,所需的规则按我的预期工作
有什么想法吗?我做错了什么吗?
更新 |已解决
null 被认为是字符串“null”
【问题讨论】:
在rules()
中你能dd
请求检查进入验证器的请求数据吗?
是的,如果你 dd() 请求值,你会看到 null 是一个字符串而不是 Null
值
【参考方案1】:
null 被视为文本 'null'
验证所需条件(http 表单值中没有 Null
。
laravel 认为 Null
在邮递员中是一个空值。
更准确地说,有一个将空值转换为Null
值的中间件。如果需要空值保持为空,可以在 kernel.php 中禁用它。
【讨论】:
谢谢,你是对的。 null 被视为字符串。以上是关于Laravel 表单请求验证规则“必需”不适用于空值的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式验证规则,以避免特殊字符不适用于 laravel 中的文本字段