【问题标题】:Laravel Form Request Validation rule "required" not working with null valuesLaravel 表单请求验证规则“必需”不适用于空值
【发布时间】: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

标签: laravel vue.js axios laravel-validation


【解决方案1】:

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

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

【讨论】:

  • 谢谢,你是对的。 null 被视为字符串。
猜你喜欢
  • 1970-01-01
  • 2021-04-18
  • 2018-09-11
  • 2017-06-13
  • 2016-07-27
  • 2023-04-02
  • 1970-01-01
  • 2017-12-06
  • 2015-10-20
相关资源
最近更新 更多