2016-05-02 4 views
0

私はYii2アプリケーションを持っています。私は別の安らかなWebページに接続したいと思います。ユーザーはアプリケーションにデータを送信し、POSTリクエストを介して送信し、JSONレスポンスに従って何かを行います。 yii2でリクエスト/フェッチ応答パートを送信するにはどうすればよいですか?Yii2を別のRESTfulアプリケーションに接続する

答えて

1

最善の方法は、あなたがYii2拡張子のないa yii2 extension for curl.

をチェックアウトするに興味がある可能性があり、その場合、あなたのRESTfulなAPIへの呼び出しを、エンドツーエンドを作るためにカールを使用することです、我々は、作成することによって、これを達成することができます以下exampledとしてコントローラに、より一般的な関数または(共有アクセスのために)、より好ましくは、モデルは:

/** 
* $method e.g POST, GET, PUT 
* $data = [ 
     'param' => 'value', 
    ] 
*/ 

public function curlToRestApi($method, $url, $data = null) 
{ 
    $curl = curl_init(); 

    // switch $method 
    switch ($method) { 
     case 'POST': 
      curl_setopt($curl, CURLOPT_POST, 1); 

      if($data !== null) { 
       curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
      } 
      break; 
      // logic for other methods of interest 
      // . 
      // . 
      // . 

     default: 
      if ($data !== null){ 
       $url = sprintf("%s?%s", $url, http_build_query($data)); 
      } 
    } 

    // Authentication [Optional] 
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
    curl_setopt($curl, CURLOPT_USERPWD, "username:password"); 

    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

    $result = curl_exec($curl); 

    curl_close($curl); 

    return $result; 
} 

それからmethodurl及び/又はdataに応じて必要基底IEでこの関数を呼び出します。

WebサービスURLにアクセスするためにfopenラッパーが有効になっている場合は、file_get_contentsを使用すると便利です。

​​

JSONレスポンスが提供されている場合は、次のように、あなたがPHPの配列を回復することができますが:

$response = json_decode($response, TRUE); 

XML応答が返された場合、

$response = new \SimpleXMLElement($response); 

しかし、APIの場合endpointはHTTPエラー状態を返し、file_get_contents関数は警告で失敗し、nullを返します。

関連する問題