我希望在我的导航栏中有一个下拉菜单,我可以选择一种货币,我的应用程序中的所有价格都会转换为选定的货币,我知道我应该使用中间件来解决这个问题,但我不知道知道如何开始。我使用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
包中 为了工作! :\
感谢。
答案 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');
}
}