【问题标题】:Select element value is string选择元素值为字符串
【发布时间】:2020-02-03 12:27:42
【问题描述】:

我通过 ajax 将选择元素选择的值发送到 Laravel 控制器操作,并根据控制器中的要求验证该值。

问题是我将选择元素值作为字符串而不是整数。 So when first option is selected which has value 0, it goes as a string ("0") to controller and does not validated as required in action method.

选择元素的选项是动态添加的。

这是我的代码

HTML

var row_data = {
    'lob_id': lob_id,
    'sub_lob_id': sub_lob_id,
    'product_id': product_id,
};

$.ajax({
    url: '{{route('
    getProductThreshold ')}}',
    type: 'get',
    dataType: 'json',
    data: row_data,
    success: function (response) {
        loader(true);
        console.log(response);
    }
});

Laravel 控制器

$validators = Validator::make($request->all(), [
            'lob_id' => 'required',
            'sub_lob_id' => 'required',
            'product_id' => 'required',
        ]);

控制器请求

如果值在请求中作为字符串发送,我应该如何使用 laravel 验证器?

【问题讨论】:

  • 如果没有实际看到您的代码,我们将无法帮助您进行调试。但是我猜你只是发送从val() 返回的值,这是一个字符串。尝试在其上使用parseInt() 强制类型强制
  • 我尝试使用parseInt() 仍然将值作为字符串发送
  • 您确定发送的值是"0",我刚刚做了一个测试,"0" 通过了required 验证。在验证之前尝试dd($request->all()),看看到底传递了什么
  • 是的,我确定它是字符串。我已经用请求值更新了问题。

标签: jquery laravel select


【解决方案1】:

通过 Internet 发送的任何数据都以字符串形式发送,并且目的地会按照其需要的方式解析和解码此字符串。这就是为什么HTTP 请求参数总是字符串

当您收到请求并等待参数的数值时,只需在使用前将其转换为数字。在您的情况下,您使用的是 Laravel PHP,您可以使用 intval()

对于 Laravel 验证器,有一个验证规则来检查传入的参数是否为数字,即numeric。 Laravel 知道参数是字符串并处理它。验证器不检查数据类型,但检查字符串的值是否为数字

你可以在这里找到完整的 Laravel 验证规则: Laravel Validation Rules

【讨论】:

  • 你指出的正确,我发布了我需要的确切验证的答案。
【解决方案2】:

我添加了另一个 laravel 验证,即 not_in:0,这对我有用。只需检查请求参数是否为零,无论参数是字符串还是整数

$validators = Validator::make($request->all(), [
            'lob_id' => 'required|not_in:0',
            'sub_lob_id' => 'required|not_in:0',
            'product_id' => 'required|not_in:0',
        ]);

【讨论】:

    【解决方案3】:

    你有两个选择:

    • 使用 parseInt 并将数据作为数字发送。虽然从技术上讲,请求正文是作为字符串发送的,但您的模型会将其中的值视为数字并会这样对待它
    • 在后端更改您的模型以将接收到的字符串解析为数字。但不建议这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-15
      • 2015-01-10
      • 2021-09-14
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2013-02-04
      相关资源
      最近更新 更多