ホームページ >PHPフレームワーク >ThinkPHP >thinkphp5 post が値を取得できない場合はどうすればよいですか?

thinkphp5 post が値を取得できない場合はどうすればよいですか?

藏色散人
藏色散人オリジナル
2022-12-06 09:29:092225ブラウズ

thinkphp5 post は、TP5 が strpos 関数を使用してヘッダーの content-type 値で app/json 文字列を検索するため、値を取得できません。解決策は、ヘッダーの content-type 値を app に設定することです。 /json.それだけです。

thinkphp5 post が値を取得できない場合はどうすればよいですか?

このチュートリアルの動作環境: Windows 7 システム、ThinkPHP バージョン 5、Dell G3 コンピューター。

thinkphp5 投稿で値を取得できない場合はどうすればよいですか?

ThinkPHP5 がクライアントから渡された Json パラメータを受信できない問題の解決策 Post

私はこの期間に API 開発を学習しており、インターネットからコースを受講し、それに従っています。つい昨日、講師が半日デバッグをし続けたという状況に再び遭遇しました。私が遭遇した問題は、API の特定の Post インターフェイスをテストするために Postman を使用したときに発生した問題でした。 , どのようにリクエストを送信しても、常にパラメーターの検証が失敗したというメッセージが表示されました。デバッグプロセス中に、あるとき、Body テーブルを介してパラメーターを渡す方法を使用したところ、API が魔法のように機能しました。そこで、あると判断しました。以前、Json の送信に問題があったため、インターネット中を探しましたが、解決策はありませんでした [ただし、2 つのナレッジ ポイントを取得して、記事の最後に記載してください]。

TP5の問題については、Du Niangができない場合はソースコードを確認することしかできないので、少しずつエラーを追跡し、最終的に問題を発見しました~

TP5 は strpos 関数を使用して、ヘッダーの content-type 値内の app/json 文字列を検索することがわかりました。つまり、ヘッダーの content-type 値を app/json に設定する必要があり、そうでない場合、TP5 は渡したとは思わないでください。 は Json パラメーターであり、値を Request::post に空に設定します。

上記により、TP5 がクライアント Post から渡された Json パラメータを受信できない問題が解決されました。

2 つの知識:

  • content-type が「application/json」である Data php は直接認識できないため、$_POST 配列は空です。解決策: $GLOBALS['HTTP_RAW_POST_DATA'] を使用して元のデータを取り出し、それを json_decode するだけです [この方法を使用すると、php.ini の always_populate_raw_post_data 値を On に設定する必要があります][$HTTP_RAW_POST_DATA、これにはPOSTデータの元データ。ただし、これはスーパーグローバル変数ではないため、関数で使用するには、 global として宣言するか、代わりに $GLOBALS['HTTP_RAW_POST_DATA'] を使用する必要があります。 ];

  • 上記のメソッドの代わりに file_get_contents('php://input') を使用すると、受信した Json パラメータを直接取得できます [TP5 ソース コードを読んだところ、初期値を取得するためにもこのメソッドを使用すること]。

推奨学習: 「thinkPHP ビデオ チュートリアル

以上がthinkphp5 post が値を取得できない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。