我正在开发一个应用程序,其中我的数据来自JSON格式的外部服务器。
我想在每个模型之间设置关系,但不使用数据库表。
有可能吗?
类似的东西:
var country_x = (country1.length > 4)?0:140;
top_text.append("text")
.attr("x",country_x)
.attr("y",120)
.attr("font-size","50")
.attr("fill","white")
.style("text-anchor","middle")
.attr("font-family","Franklin Gothic Demi Cond")
.text(country1); // This I need to change the style
top_text.append("text")
.attr("x",215)
.attr("y",120)
.attr("font-size","38")
.attr("fill","white")
.attr("font-family","Calibri")
.text("will grow");
答案 0 :(得分:1)
您可以创建一个处理请求的服务类并返回类实例:
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();
}
}
基本上,该服务将进行外部API调用,并将响应传递给创建实例的工厂。
请注意,您只需要在构造中添加工厂并将其绑定,因为laravel使用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;
}
}
工厂将返回一个非常有用的Collection,因为它包含有用的方法,或者你可以返回一个数组。
在这个例子中,我使用了curl库https://github.com/ixudra/curl,但它可以用原生php或其他库替换。
然后您可以通过在控制器中注入FlightService
来使用。
P.S:代码未经测试但代表了一种可能的方法