Laravel 表单请求验证规则 "required" 不适用于空值

Laravel Form Request Validation rule "required" not working with null values

我有 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 组件中,默认字段值为空。当我提交空表单时,我预计验证会失败,并且 return 消息指出字段是必需的,但我得到的错误只是关于文件 mime、大小和日期。没有关于要求...

Request Headers Form Data

根据 Laravel 文档,我了解到必需的规则必须 return 错误。 “如果以下条件之一为真,则字段被视为“空”:值为空...” https://laravel.com/docs/8.x/validation#rule-required

目前我想到的唯一解决方案是 javascript 检查值是否为 null,只有在不为 null 时才添加到 FormData。在那种情况下,所需的规则会按我的预期工作

有什么想法吗?我做错了什么?

已更新 |已解决

null 被认为是字符串“null”

null 被视为验证所需条件的文本 'null'(http 表单值中没有 Null

laravel认为Null在postman中是一个空值。 更准确地说,有一个中间件可以将空值转换为 Null 值。如果您需要空值保持为空,可以在 kernel.php 中禁用它。