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 请求验证不适用于邮递员请求

正则表达式验证规则,以避免特殊字符不适用于 laravel 中的文本字段

HTML5 必需属性不适用于 AJAX 提交

Laravel 图像规则验证不适用于 Laravel 8,但适用于 Laravel 7 |拉拉维尔 |图片 |验证

如果字段为空需要另一个字段,Laravel 验证规则

如何根据输入请求规则在 laravel 刀片中显示错误消息