Метод вызывается дважды - PullRequest
1 голос
/ 17 марта 2020

У меня есть приложение, в котором пользователи вводят данные о проживании, включая стоимость за ночь, а затем выбирают соответствующую валюту из выпадающего списка. Затем я использую fixer.io, чтобы показать стоимость как в валюте, в которой он был введен, так и в пересчете на валюту пользователя по умолчанию.

Стоимость сохраняется в базе данных как целое число. У меня есть методы convertToInteger и convertFromInteger, которые берут валюту, смотрят, сколько существует субъединиц и выполняют соответствующую математику.

Существует также метод formatCurrency для форматирования в соответствии с валютой. И метод convertBetweenCurrency для фактического преобразования.

Метод convertFromInteger вызывается внутри метода formatCurrency.

$cost_per_night_entered работает нормально и отображает правильное количество и форматирование , Тем не менее, $cost_per_night_user, по-видимому, дважды преобразуется из целого числа - оно всегда отсутствует этой единицей. Итак, 148 долларов отображаются как 1,48.

Я пытался использовать Laravel fresh() и refresh() безрезультатно. Связано ли это с «вложением» вызовов вместе? Я не думаю, что я сделал что-то глупое, например, дважды позвонил - но взгляды sh могут быть иначе:)

Контроллер show метод:

$cost_per_night_entered = formatCurrency($accommodation->cost_per_night, $accommodation->currency, getLocale($accommodation->country));

$cost_per_night_user = formatCurrency(convertBetweenCurrency($accommodation->cost_per_night, $accommodation->currency, Auth::user()->currency), Auth::user()->currency, request()->server('HTTP_ACCEPT_LANGUAGE'));

Методы модели :

function formatCurrency($amount, $currency_code, $locale)
{
$value = intval(convertFromInteger($amount, $currency_code));

$money = new Money\Money($value, new Money\Currency($currency_code));
$currencies = new Money\Currencies\ISOCurrencies();

$numberFormatter = new \NumberFormatter($locale, \NumberFormatter::CURRENCY);
$moneyFormatter = new Money\Formatter\IntlMoneyFormatter($numberFormatter, $currencies);

return $moneyFormatter->format($money);
}



function convertBetweenCurrency($amount, $from_currency, $to_currency)
{
$endpoint = 'convert';
$access_key = 'xxx';

// initialize CURL:
$ch = curl_init('http://data.fixer.io/api/'.$endpoint.'? access_key='.$access_key.'&from='.$from_currency.'&to='.$to_currency.'&amount='.$amount.'');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// get the JSON data:
$json = curl_exec($ch);
curl_close($ch);

// Decode JSON response:
$conversionResult = json_decode($json, true);

// access the conversion result
return intval($conversionResult['result']);
}



function convertFromInteger($amount, $currency_code)
{
$currencies = PragmaRX\Countries\Package\Countries::currencies();

$currency = $currencies->where('iso.code', $currency_code)->toArray();

return $amount / (1 / $currency[$currency_code]['units']['minor']['majorValue']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...