CodeIgniter RestServerのputリクエストでパラメータが取得できない問題を解決

WBOY
リリース: 2016-06-16 09:16:21
オリジナル
1021 人が閲覧しました

CodeIgniter RestServer の put リクエストでパラメータが取得できない問題を解決しました

最近、restserver を使用しているときに、$this->put によって取得されたパラメータがすべて null であることがわかりました。確認したところ、これは一般的な問題であることがわかりました。リンクを参照してください: https://github.com/chriskacerguis/codeigniter-restserver/issues/362

まず公式の説明を見てみましょう: http://code.tutsplus.com/tutorials/working-with-restful-services-in-codeigniter-2--net-8814 を参照してください

$this->put()

Reads in PUT arguments set in the HTTP headers or via cURL.
ログイン後にコピー

つまり、この関数は、cURL 経由でアクセスしたときに送信される put パラメーター、または http ヘッダー内のパラメーターを読み取ることができます。ただし、テスト後、パラメーターがヘッダーに配置されていても、$this->put() にアクセスできません。根本的な原因は、ソース コードのどこかでブロックされている可能性があります。 Zajia はまだ根本的な解決策を見つけていませんが、次の 2 つの方法で問題を一時的に解決できます。

1、投稿と一致し、パラメーターは引き続き本文で渡されます。基本クラスに関数を記述します:

    public function getPut($key){
        return $this->input->input_stream($key);
    }
ログイン後にコピー
クライアントがアクセスするときは、ボディにパラメータを普通に渡すだけでOKです。現時点では $this->post() を通じてパラメータを取得することはできず、input_stream から取得する必要があることに注意してください。上記の関数は、次のような複数のフィールドの同時フェッチをサポートしています。
$data = $this->getPut(array('tel', 'name', 'addr'));
ログイン後にコピー
実際、CI のすべての入力関数は複数のフィールドの同時フェッチをサポートする必要がありますが、Restserver の this->get() post() はそれをサポートしていません。

補足: 本文にパラメータを置く場合、$this->put() を直接使用して、対応するフィールドを取得できます。ドキュメントではヘッダーにあると記載されていますが、実際には本文にあります。ただし、$this->put() は複数のフィールドをサポートしていないため、上記の関数は依然として意味があります。

$this->delete() にもこの問題があります。ヘッダー内のパラメーターは読み取れませんが、本文内のパラメーターは読み取れます。 ! !

2. パラメーターはヘッダーに渡され、関数は基本クラスに記述されます。

    /**
     * 获得key对应的header
     * @param $key
     * @return mixed
     */
    public function getHeader($key){
        return $this->input->get_request_header($key, TRUE);
    }
ログイン後にコピー
個人的には最初の方法をお勧めします。パラメータは本体に渡されます。 http ルールに従い、ヘッダー内で http ルールを乱用しないことが最善です。
追記:restserver に置かれたパラメーターが取得できない問題は、Content-Type: application/json の設定とは関係ありません。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート