将货币选择器添加到laravel

时间:2018-05-19 05:13:28

标签: php laravel

我希望在我的导航栏中有一个下拉菜单,我可以选择一种货币,我的应用程序中的所有价格都会转换为选定的货币,我知道我应该使用中间件来解决这个问题,但我不知道知道如何开始。我使用Fixerlaravel-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. 下一步我还应该做些什么?
  3. 感谢。

1 个答案:

答案 0 :(得分:2)

App :: setLocale()用于语言目的。

请勿使用中间件设置会话默认值。它将使您的路由文件膨胀。使用视图编辑器进行输出。 https://laravel.com/docs/4.2/responses#view-composers

如果没有View Composer提供程序,请运行以下命令:

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”中的“自动加载”属性中紧缩,在“ 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');
    }
}