【问题标题】:How to limit the size of array submitted via POST request in Laravel? [duplicate]如何限制通过 Laravel 中的 POST 请求提交的数组的大小? [复制]
【发布时间】:2021-04-12 07:12:15
【问题描述】:

我想处理带有对象数组的 POST 请求,如下所示:

[
  {"path":"./../../", ...},
  {"path":"./../../", ...},
  {"path":"./../../", ...},
  ...
]

我还没有找到任何方法来设置将限制此类数组的最大长度的验证规则,该数组位于 POST 请求正文的根中,例如最多 100 个对象。

我在这里看到的唯一相关解决方案是通过 post_max_size 选项限制 PHP POST 大小,但是,这不是我想要的。有谁知道如何为这种情况设置正确的验证规则?

我正在使用 Laravel8。

【问题讨论】:

  • 走错路了,别管post_max_size。 POST 中的内容由您在表单中放置的内容或为 ajax 调用构建数据的方式控制。 我很想说,如果你不建造它,他们就不会来
  • 你可以使用"arr_param" => ["required","array","min:2","max:4"], // validate an array contains minimum 2 elements and maximum 4
  • @DerekPollard 但这并不能阻止发送 1000 次事件。我认为这就是问题所在
  • @RiggsFolly 没错!

标签: php laravel


【解决方案1】:

要扩展 Derek 已经给出的答案,您可以使用 laravel 验证器来验证您的请求。此验证器还包含最小和最大大小选项。

欲了解更多信息,请参阅https://laravel.com/docs/8.x/validation#available-validation-rules

【讨论】:

  • 感谢您的回答。我知道验证规则。关键是没有验证规则可以验证 POST 正文根中的数组。至少我还没有找到。
  • 刚刚更新了问题以反映这个想法。
  • 如果我能很好理解 $request->all(); 的大小?
  • 不仅仅是$request->all();的大小,还有POST请求体根中数组的大小。
【解决方案2】:

您可以在 laravel 中定义您的自定义规则

1- 首先使用 artisan command 创建自定义规则:

php artisan make:rule ArrayCheck

2- 转到 app/Rules 文件夹并编辑 ArrayCheck.php

<?php

namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;

class ArrayCheck implements Rule {
    
    public function passes($attribute, $value) {
        return count($value) <= 10;
    }

    
    public function message() {
        return 'Your Array is bigger than our limits!';
    }
}

3- 然后你可以在任何你想要的地方使用你的自定义规则:

use App\Rules\ArrayCheck;

$request->validate([
    'hobbies' => ['required', new ArrayCheck],
]);

【讨论】:

  • 感谢您的回答。请告诉我,我应该将这条新规则应用于我的问题示例中的哪个字段?
  • 既然size 规则已经存在,为什么还要这样做?
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 2021-09-30
  • 2015-11-03
  • 2018-10-13
  • 1970-01-01
  • 2014-07-17
相关资源
最近更新 更多