web-dev-qa-db-fra.com

format monétaire en laravel

J'utilise le format monétaire à de nombreux endroits dans mes fichiers Blade. J'utilise number_format pour afficher un format de devise approprié. Donc ça ressemble à ça

<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

si je ne l'utilise pas ça ressemble à ça

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

Aussi pour les champs de saisie j'utilise toFixed(2) dans beaucoup d'endroits.

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

N'y a-t-il pas un moyen le plus simple d'afficher toutes les variables comme format monétaire approprié? J'ai utilisé number_format Et toFixed(2) presque plus de 50 fois maintenant.

7
Johnny

Vous pouvez créer une personnalisée Laravel . Vous devez toujours appeler cette directive à chaque endroit où vous en avez besoin, mais elle présente l'avantage que si vous souhaitez modifier la code (par exemple remplacer number_format par quelque chose d'autre) vous n'avez qu'à mettre à jour cette directive.

Exemple (extrait de la documentation et mis à jour pour votre cas d'utilisation) (dans votre méthode AppServiceProviderboot):

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

Pour utiliser dans dans Blade:

@convert($var)
15
Gijs de Jong

Vous pouvez ajouter une directive Blade personnalisée dans la méthode boot() dans votre fichier AppServiceProvider.php.

Par exemple:

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

Et dans votre fichier Blade, il vous suffira d'utiliser @money() comme ceci:

@money($yourVariable)
9
Cédric

Je n'utiliserais surtout pas de "directive" ... Je l'ai trouvé plus propre pour faire la même logique qu'un accesseur sur le modèle.

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