Добавление средства выбора валюты в Laravel - PullRequest
0 голосов
/ 19 мая 2018

Я хочу, чтобы в моей панели навигации был раскрывающийся список, в котором я мог бы выбрать валюту, и все цены в моем приложении конвертируются в выбранную валюту. Я знаю, что для этого мне нужно использовать промежуточное ПО, но я не знаю, какначать.Я использую Fixer с laravel-swap в качестве пакета для обменных курсов.

Что я сделал

Я сделал промежуточное ПО с именемэто Currancy и его содержимое:

<?php

namespace App\Http\Middleware;

use Closure;
use Swap\Swap;
use Swap\Builder;

class Currancy
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Session::has('appcurrency') AND array_key_exists(Session::get('appcurrency'), Config::get('currencies'))) {
            $currency = Session::get('appcurrency'); 
            App::setLocale($currency);
        }
        else {
          App::setLocale(Config::get('app.currency'));
        }
        return $next($request);
    }
}

Я также сделал currencies.php в папке конфигурации:

<?php

return [
  'IDR' => [
      'name' => 'Indunesian Rupiah',
  ],
  'USD' => [
      'name' => 'U.S Dollar',
  ],
  'EUR' => [
      'name' => 'Euro',
  ],
];

Я также добавил это в свой config\app.php

'currency' => 'IDR',

в этом случае моей валютой по умолчанию является IDR, если пользователь не выберет другие.

PS: для моего промежуточного программного обеспечения и файла конфигурации у меня есть идея языкового перевода, и я неЯ не знаю, как присоединить его к пакету SWAP, чтобы он работал!: \

Вопросы

  1. Как правильно обращаться с валютами?
  2. Что еще я должен сделать для следующего шага?

спасибо.

1 Ответ

0 голосов
/ 28 июня 2018

App :: setLocale () предназначена для языковых целей.

Не используйте промежуточное программное обеспечение для установки значения сеанса по умолчанию.Это будет раздувать ваш файл маршрута.Используйте view composer для вывода.https://laravel.com/docs/4.2/responses#view-composers

Запустите эту команду, если у вас нет провайдера компоновщика представления:

php artisan make:provider ComposerServiceProvider

В "app / Providers / ComposerServiceProvider.php", в методе "boot ()"

public function boot()
{
    View::composer(array('header','footer'), function($view)
    {
        if (!currentCurrency()) {
            setCurrency(config('app.currency'));
        }
        $view->with('currencies', config('currencies');
    });
}

Определить некоторые вспомогательные функции.Чтобы загрузить помощник, используйте функцию автозагрузки композитора.В «composer.json» в атрибуте «autoload» тесно, после «psr-4»: он загрузит «app / Support / helpers.php» в качестве примера.

    "psr-4": {
        "App\\": "app/"
    },
    "files": [
        "app/Support/helpers.php"
    ]

После изменения«composer.json», создайте файл автозагрузки с помощью команды:

composer dump-autoload

В «app / Support / helpers.php» (создайте его) добавьте следующие функции:

<?php

if (!function_exists('currentCurrency')) {
    /**
     * @return string
     */
    function currentCurrency(){
        if (Session::has('appcurrency') AND array_key_exists(Session::get('appcurrency'), config('currencies'))) {
            return Session::get('appcurrency');
        }
        return '';
    }
}

if (!function_exists('setCurrency')) {
    /**
     * @param string $currency
     * @return void
     * @throws \Exception
     */
    function setCurrency($currency){
        if (array_key_exists($currency, config('currencies'))) {
            Session::set('appcurrency', $currency);
        } else {
            throw new \Exception('not a valid currency');
        }
    }
}

Если вам нужно установить локаль в одну из валют, измените метод setCurrency, поскольку вам нужно установить локаль только один раз за сеанс.

/**
* @param string $currency
* @return void
* @throws \Exception
*/
function setCurrency($currency){
    if (array_key_exists($currency, config('currencies'))) {
        Session::set('appcurrency', $currency);
        App::setLocale($currency);
    } else {
        throw new \Exception('not a valid currency');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...