如何使外部API调用响应可用于所有模型实例?

时间:2019-03-23 06:30:14

标签: php api laravel-5 eloquent guzzle

我有一个Laravel应用,其中列出了旅行及其价格。

我希望价格根据用户的IP地址以其本国货币显示。

目前,我在模型中有以下代码:

    // Guzzle call to external api that returns exchange rates JSON
    $response = $client->request('GET','http://www.floatrates.com/daily/usd.json');

    //$userCurrency would be something like "EUR"
    $rate = json_decode($response->getBody()->getContents())->$userCurrency->rate;

    // I multiply exchange rate with the USD price to get price in local currency
    $priceInLocalCurrency = $usdPrice * $rate;

    // return price in local currency
    return $priceInLocalCurrency;

到目前为止,效果很好,但是由于在返回的每个模型实例上调用外部API的过程非常缓慢。这就解释了旅行人数缓慢的原因。

我已经看到了有关如何通过将变量(或api调用响应)放在BaseController中来使所有控制器均可访问该变量的答案:

https://stackoverflow.com/a/25194280/10278170

我的目标是相似的,但要使变量可用于所有模型实例。因此,外部API仅被调用一次。

与控制器模型不同,它扩展了这一点:

use Illuminate\Database\Eloquent\Model;

哪个位于供应商内部,所以我无法在其中添加内容。

0 个答案:

没有答案