😎

【Laravel】大量のリクエストを送信したいけど「Input variables exceeded 1000. 」で怒られる😭⇦楽に解決

2022/11/23に公開

はじめに

「リクエストを大量に送信したいけど怒られる🥺」
「リクエストを削ることはできないからコードで解決したい;;」

そんなことはないでしょうか?

今回は大量のリクエストを送信する方法から、PHPで受け取った後の処理まで解説させていただきます。

この記事を見るメリット

  • 大量のリクエストを送信する方法が分かる
  • オブジェクトをJSON文字列に変換する方法が分かる
  • JSON文字列を連想配列に戻す方法が分かる

対象者

この記事は下記のような人を対象にしています。

  • プログラミング初学者
  • 駆け出しエンジニア
  • 大量のリクエストを送信したい人
  • リクエストを削るわけにはいかない状況の人
  • php.iniを修正できない環境の方

結論

大量のリクエストを送信したい場合は、JSON文字列でリクエストを送信しよう😊
今回はaxiosでコードを解説していますが、Inertiaでも同じです。

javascript側
axios.post(route('hoge'), {
  // 解説①
  hogeRequest: JSON.stringify({
    // 送信するリクエストをオブジェクトで作成
    // hoge: hoge,
    // foo: bar,
  })
})
.then(response => {
  // 成功処理(レスポンスも引数で受け取ることができる!)
})
.catch(error => {
  // エラー処理(サーバー側のエラー情報も取得できる!)
})

JSON文字列になっているので、サーバー側でデコードして連想配列で扱えるようにします!

php側
// 解説②
$request = json_decode(request()->hogeRequest, true);

解説

解説①:JSON.stringify()

JSON.stringify()は値やオブジェクトをJSON文字列に変換することができる関数です。
引数は3つまで持つことができます。

JSON.stringify()の引数の解説
第一引数(必須)
値。型は任意

第二引数(任意)
keyとvalueを引数に持った関数を指定することで、フィルターや加工をかけることができます。
配列も入れることができ、その場合は配列で指定したキーのみの値でフィルターをかける。


第三引数(任意)
出力時のJSON文字列を成形することができる。
数値でも文字列でもどちらも指定することが可能。
数値の場合はインデント数を指定することができ、最大10文字までインデントされる。
文字列の場合は、本来インデントされる箇所を文字列で埋めることができる。

解説②:json_decode()

json_decode()はJSON文字列をオブジェクトや連想配列にデコードをすることができる関数です。
第四引数のフラグは指定できるものが多すぎるので、この関数のみの引数である第三引数まで解説させていただきます。

json_decode()の引数の解説
第一引数(必須)
デコードするJSON文字列を指定します。
余談ですが、UTF-8 でエンコードされた文字列でのみでしか動作しないので注意です。

第二引数(任意)
デコード後に返すオブジェクトの種類をBooleanで指定します。
デフォルトはfalseです。
true:連想配列形式のオブジェクトを返します。
false:object形式で値を返します

第三引数(任意)
デコードするデータのネストの深さの最大値を数値で指定します。
指定する値は、0~2147483647で指定します。
指定しない場合は全てデコードして返します。

まとめ

  1. リクエストをJSON文字列に変換して送信
  2. サーバー側で文字列で受け取る
  3. 受け取った文字列を連想配列にデコードする

上記の流れで実装を行うことで、大量のリクエストを送信することができます!

おわりに

今回は大量のリクエストを送信し、連想配列で受け取る方法まで解説させていただきました。
記述量も少ないので、タイトルのエラーになってしまった方は、すぐ自分のコードに書き加えることができるとおもいます!

最後まで記事を見てくださりありがとうございました。
誤字や脱字、コードのリファクタリングできる箇所などがありましたらコメントくださるとありがたいです!
また、いいねをしてくださると、筆者が喜びます:)

Discussion