Sie eine Serviceklasse machen könnte, die die Anforderung und gibt Klasseninstanzen Griffe:
namespace App\Services;
class FlightService
{
/**
* @var FlightFactory
*/
private $flightFactory;
public function __construct(FlightFactory $flightFactory)
{
$this->flightFactory = $flightFactory;
}
public function getAllFlights()
{
$flightsJson = $this->getFromExternalCurl();
return $this->flightFactory->buildFlightList($flightsJson);
}
private function getFromExternalCurl()
{
return Curl::to('http://www.foo.com/flights.json')
->withData(array('foz' => 'baz'))
->asJson()
->get();
}
}
Grundsätzlich ist der Dienst würde die externe API-Aufruf machen und die Antwort wird an eine Factory übergeben, die die Instanzen erstellt.
Beachten Sie, dass Sie brauchen nur das Werk in dem Konstrukt hinzuzufügen und es binded weil Laravel verwendet https://laravel.com/docs/5.4/container
namespace App\Factories;
class FlightFactory
{
public function buildFlightList($flightJsonList)
{
$flightCollection = collect();
foreach($flightJsonList as $flightJson) {
$flightCollection->push($this->buildFlight($flightJson));
}
return $flightCollection;
}
public function buildFlight($flightJson)
{
$flight = new Flight();
// add properties
return $flight;
}
}
Die Fabrik wird eine Collection zurück, die verry nützlich ist, weil es nützliche Methoden enthält, oder Sie können zurückkehren eine Anordnung.
In diesem Beispiel habe ich eine Curl-Bibliothek verwendet https://github.com/ixudra/curl, aber es kann mit nativen PHP oder anderen Bibliotheken ersetzt werden.
Dann können Sie verwenden, indem Sie die FlightService
in Ihre Controller injizieren.
P. S: Code nicht getestet, sondern stellt ein möglicher Ansatz
Warum nicht eine „Dienstleistung“ Klasse machen, die Daten aus der api bekommt und eine „Fabrik“ verwenden Modelle zu instanziiert? –
mit diesem Codebeispiel denke ich, du bist so falsch! Ein Service eingerichtet –
können Sie bitte einen Link zu einer guten Quelle, wo ich mehr Informationen erhalten können? Ist es ein SERVICE CONTAINER, von dem Sie sprechen? https://laravel.com/docs/5.4/container – aspirinemaga