2016-08-05 44 views
1

Ich habe die Klassendatei ex: Stats.php, wenn ich ein Array mit Informationen von einer anderen Methode in einer anderen Anwendung und Klassendatei ex: Information.php geben möchte.Aufruf einer Methode aus einer anderen Klasse in einer anderen Anwendung mit FOSTRestBundle in Symfony

Datei stats.php

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

In anderer Anwendung. Datei Informations.php

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

Wie ich Funktion getLocales von URL-Aufruf: http://myhost.com/api/locales in Funktion getStatus()?

+0

Entschlossen mit GuzzleBundle. –

Antwort

1

Wenn Sie das GuzzleBundle wie in Ihrem Kommentar erwähnt verwenden. Sie können einfach einen Client in die Klasse mit getStats() einfügen oder indem Sie ContainerAware erstellen und den Fressgutzuklienten über seine Service-ID aus dem Container abrufen. Wenn Sie müssen keine Standardoptionen für den Client gesetzt, dh Sie nur eine URL, die Sie übernehmen zugreifen möchten ist immer für alle Umgebungen zur Verfügung von allen Orten konnte man nur einen neuen Client mit Standardwerten erstellen:

$guzzleClient = new GuzzleHttp\Client(); 

eine Anfrage mit dem Kunden macht, ist in dem guzzle docs in den Quickstart in section Sending Requests beschrieben:

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

Wenn die Anforderung erfolgreich ist, um die Schauplätze durch den Aufruf abrufen kann:

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

Entweder Casting getBody() zu string oder mit getContent() ist hier wichtig. Siehe auch die Dokumentation von Guzzle, insbesondere den Abschnitt using responses.

Zum Beispiel, wenn Sie eine json-codierte Zeichenfolge senden Sie so etwas wie tun:

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

Es gibt viele Dinge, die gesagt werden, sollte diesen Ansatz wie es instabil ist, weil es stützt sich auf eine funktionierende Netzwerkverbindung möglicherweise auf einen anderen Server, es ist nicht leicht testbar, Übertragungsausnahmen werden nicht elegant behandelt, etc. pp., aber für einen einfachen Proof of Concept oder als Startpunkt sollte dies ausreichen.