web-dev-qa-db-ja.com

laravelの通貨形式

ブレードファイルの多くの場所で通貨形式を使用しています。 number_formatを使用して適切な通貨形式を表示しています。だからこんな感じ

_<p>${{ number_format($row->nCashInitialBalance, 2) }}</p> // $1,123.00
<p>${{ number_format($row->nCashCalculatedBalance, 2) }}</p> // $300.50
<p>${{ number_format($row->nCashPaymentsReceived, 2) }}</p> // $2,341.15
<p>${{ number_format($row->nCardFinalBalance, 2)}}</p> // $234.10
_

使わないとこんな感じ

_<p>${{ $row->nCashInitialBalance }}</p> // $1123
<p>${{ $row->nCashCalculatedBalance }}</p> // $300.5
<p>${{ $row->nCashPaymentsReceived }}</p> // $2341.15
<p>${{ $row->nCardFinalBalance }}</p> // $234.1
_

また、入力フィールドについては、多くの場所でtoFixed(2)を使用しています。

_#nDiscount_fixed").val() = parseFloat( $("#nDiscount_fixed").val()).toFixed(2);
_

すべての変数を適切な通貨形式で表示する最も簡単な方法はありませんか? _number_format_とtoFixed(2)を50回以上使用しました。

7
Johnny

custom Laravel directive を作成できます。このディレクティブは、必要なすべての場所で呼び出す必要がありますが、変更したい場合は、コード(たとえば、number_formatを別のもので置き換える)は、そのディレクティブを更新するだけで済みます。

例(ドキュメントから取得され、ユースケースに合わせて更新されています)(AppServiceProviderbootメソッド内):

Blade::directive('convert', function ($money) {
    return "<?php echo number_format($money, 2); ?>";
});

ブレードで使用するには:

@convert($var)
15
Gijs de Jong

_AppServiceProvider.php_ファイルのboot()メソッドに カスタムブレードディレクティブ を追加できます。

例えば:

_Blade::directive('money', function ($amount) {
    return "<?php echo '$' . number_format($amount, 2); ?>";
});
_

そして、Bladeファイルでは、次のように@money()を使用する必要があります。

_@money($yourVariable)
_
9
Cédric

私はほとんど「ディレクティブ」を使用しません...モデルのアクセサーと同じロジックを実行する方がわかりやすいと思いました。

public function getAmountAttribute($value)
{
    return money_format('$%i', $value);
}
5
Robert Kehoe