2016-08-05 12 views
1

當我想給另一個應用程序和類文件ex:Information.php中的另一個方法提供信息時,我有類文件ex:Stats.php。在Symfony中使用FOSTRestBundle調用另一個應用程序中的另一個類的方法

文件Stats.php

public function getStats() 
{ 
$myInformations = // here i want to get information from Information.php 
. 
. 
. 
return $myInformations; 
} 

在不同的應用程序。 文件Informations.php

/** 
* Get all locales 
* @FOS\View() 
* @FOS\Get("/locales") 
* @param ParamFetcherInterface $paramFetcher 
* @return mixed 
*/ 
public function getLocales(ParamFetcherInterface $paramFetcher) 
{ 
    . 
    . 
    . 
    return $locales; 
} 

我如何調用函數getLocales從網址:函數中的getStatus http://myhost.com/api/locales()?

+0

用GuzzleBundle解決。 –

回答

1

當您在評論中提到使用GuzzleBundle時。您可以將一個客戶端注入到包含getStats()的類中,或者通過將其添加到ContainerAware中,並通過容器中的服務ID檢索guzzle-client。如果您沒有設置默認選項爲您的客戶,即你只是想訪問你假設一個URL總是可以從所有的地方,你可以只創建一個新的客戶端使用默認值所有環境:

$guzzleClient = new GuzzleHttp\Client(); 
通過調用

$response = $guzzleClient->get('http://myhost.com/api/locales') 

當請求成功,你可以檢索語言環境:

使得與客戶端的請求,在狂飲文檔中描述Quickstart in section Sending Requests

$content = $response->getBody()->getContent(); 

鑄造getBody()到字符串或使用getContent()在這裏很重要。再次參考Guzzle的文檔,特別是關於using responses的部分。

例如,如果您發送的JSON編碼字符串,你可以這樣做:

$encodedLocales = $response->getBody()->getContent(); 
$decodedLocales = json_decode($encodedLocales, true); 
if (json_last_error() !== JSON_ERROR_NONE) { 
    throw new \Exception(json_last_error_msg()); 
} 

有很多事情,應該說對這種做法,如它的脆弱,因爲它依賴於一個有效的網絡連接可能是到一個不同的服務器,它不容易測試,傳輸異常不會優雅地處理,等等,但是對於一個簡單的概念證明或作爲一個起點,這應該就足夠了。

相關問題