NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Money for Laravel

Formátovanie a parsovanie

format() vykresľuje cez zaregistrovaný MoneyFormatter: ICU, ak je načítané ext-intl, inak deterministický formátovač. Lokalita sa berie z argumentu, potom z money.formatting.locale a nakoniec z lokality aplikácie:

use RoundlyConsulting\Money\Formatting\FormatOptions;

$usd = Money::ofMajor('1234.50', 'USD');

$usd->format();                                // app locale (or money.formatting.locale)
$usd->format('en_US');                         // "$1,234.50"
$usd->format('en_US', FormatOptions::code());  // "USD 1,234.50"
$usd->format('en_US', FormatOptions::none());  // "1,234.50"
$usd->format('en_US', new FormatOptions(grouping: false));   // "$1234.50"
$usd->format('en_US', new FormatOptions(fractionDigits: 0, rounding: RoundingMode::HalfEven)); // "$1,234"
Money::ofMajor('10', 'USD')->format('en_US', FormatOptions::whole());  // "$10"

Money::ofMajor('1234.50', 'EUR')->format('de_CH', FormatOptions::code()); // "EUR 1’234.50"
Money::ofMajor('1234.50', 'EUR')->format('sk', FormatOptions::code());    // "1 234,50 EUR"
Money::ofMinor(1234, 'JPY')->format('en_US');   // "¥1,234" — exponent 0
Money::ofMinor(1234, 'BHD')->format('en_US');   // "BHD 1.234" — exponent 3
Money::ofMinor('1234567890123456789', 'USD')->format('en_US'); // "$12,345,678,901,234,567.89"

FormatOptions

  • display — CurrencyDisplay::Symbol, Code alebo None; skratky FormatOptions::code() a FormatOptions::none().
  • fractionDigits — null znamená exponent meny; menej číslic sa zaokrúhli podľa rounding (null = money.rounding).
  • trimTrailingZeros — FormatOptions::whole() pri celých sumách vynechá nulové desatinné miesta.
  • grouping — false vypne oddeľovače tisícov.

ICU formátuje double, presne do 15 platných číslic. Nad túto hranicu balík vloží presné desatinné číslice do šablóny ICU, takže oddeľovače, zoskupovanie (vrátane indického 3/2) aj číselná sústava lokality stále sedia. Vlastné meny, ktoré ICU nepozná, sa zobrazia s vlastným symbolom, napríklad „pts 1,200“.

Deterministický fallback

Nastavte MONEY_FORMATTER=decimal (alebo použite auto bez ext-intl) a výstup bude na každom serveri identický, riadený vzorom a oddeľovačmi z fallback. Ak nastavíte intl bez rozšírenia, balík okamžite vyhodí FormatterUnavailable.

// config/money.php — used when MONEY_FORMATTER=decimal, or with auto and no ext-intl
'formatting' => [
    'driver' => env('MONEY_FORMATTER', 'auto'),
    'fallback' => [
        'pattern' => '{sign}{amount} {code}',   // placeholders: {sign} {amount} {code} {symbol}
        'decimal_separator' => '.',
        'thousands_separator' => ',',
    ],
],

Money::ofMajor('1234.50', 'USD')->format();   // "1,234.50 USD" — identical on every host

Parsovanie vstupu

Money::parse('1 234,50 EUR', locale: 'sk');     // 1234.50 EUR
Money::parse('(1,234.50)', 'USD', 'en');         // -1234.50 USD — accounting negative
Money::parse("CHF 1’234.50", locale: 'de_CH');   // 1234.50 CHF
Money::parse('12,34,567.50', 'INR', 'hi_IN');    // 1234567.50 INR — Indian grouping
Money::parse('$5', 'CAD', 'en');                 // 5.00 CAD — a shared symbol reads as the argument
Money::parse('$5');                              // 5.00 USD in a USD shop — InvalidAmount in a EUR one

Money::parse('1.23.4', 'EUR', 'en');             // throws InvalidAmount — refused, never guessed
Money::parse('10.005', 'USD', 'en');             // throws RoundingNecessary
  • Voliteľný token meny na začiatku alebo na konci: registrovaný kód alebo symbol. Symbol, ktorý používa viac krajín ($, £, ¥, kr), sa prečíta ako mena z argumentu, alebo ako money.default_currency, ak ho táto mena používa; inak sa odmietne (InvalidAmount), nikdy sa neháda — Money::parse('$5') je v obchode s USD 5.00 USD a v obchode s EUR chyba.
  • Rozpoznaná mena, ktorá sa líši od argumentu, vyhodí CurrencyMismatch; bez tokenu aj argumentu sa použije money.default_currency.
  • Znamienka: mínus alebo plus na začiatku či na konci, prípadne účtovnícke zátvorky. Dve znamienka alebo nespárované zátvorky sa odmietnu.
  • Najviac jeden desatinný oddeľovač; zoskupovanie len v celej časti a len v správne tvorených skupinách — nejednoznačný vstup sa odmietne, nikdy sa neháda.
  • Príliš presný vstup vyhodí RoundingNecessary; vstup je obmedzený na 128 znakov.

Blade

<p>{{ __('Total') }}: @money($order->total)</p>
<p>@money($order->total, 'sk')</p>   {{-- null renders an empty string --}}

@money($price) alebo @money($price, 'sk') vypíše escapovaný výstup zaregistrovaného formátovača; null vykreslí prázdny reťazec. Zapína a vypína sa cez macros.blade.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.