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

Validácia, requesty a kolekcie

Peňažný vstup validujte objektmi pravidiel alebo textovými pravidlami:

use RoundlyConsulting\Money\Rules\CurrencyCode;
use RoundlyConsulting\Money\Rules\MoneyAmount;

$request->validate([
    'price'    => ['required', MoneyAmount::in('EUR')->positive()->max('99999.99')],
    'fee'      => [MoneyAmount::inCurrencyFrom('currency')->allowNegative()],
    'amount'   => [MoneyAmount::in('EUR')->localized('sk')],      // accepts "1 234,50"
    'currency' => ['required', (new CurrencyCode)->isoOnly()],
    'payout'   => ['required', new CurrencyCode(['EUR', 'CZK'])],
    'legacy'   => 'money_amount:EUR',
    'code'     => 'currency_code:EUR,CZK',
]);
  • MoneyAmount::in($currency) alebo MoneyAmount::inCurrencyFrom($field) — pevná mena alebo mena zo susedného poľa (obmedzená cez currencies.allowed).
  • min() / max() — inty a desatinné reťazce sú celé jednotky; hranica jemnejšia ako mena sa zaokrúhli smerom dovnútra.
  • positive() vyžaduje viac ako nulu; allowNegative() zruší predvolenú kontrolu nezápornosti.
  • localized(?$locale) — prijme lokalizovaný vstup ako „1 234,50“ cez parser.
  • new CurrencyCode(?$allowed) — registrovaný kód obmedzený na $allowed alebo currencies.allowed; ->isoOnly() odmietne vlastné meny.
  • Textové pravidlá: currency_code, currency_code:EUR,CZK a money_amount:EUR (bez parametra predvolená mena).

Hlášky sú v money::validation.* — amount, precision, too_large, negative, positive, min, max a currency — v angličtine a slovenčine. Upraviť ich môžete po publikovaní money-translations.

Čítanie sumy z requestu

$price = $request->money('price', 'EUR');              // JSON 1.1 → 1.10 EUR, not 1.11
$fee   = $request->money('fee', currencyKey: 'currency'); // currency from another input
$tip   = $request->money('tip');                       // money.default_currency; null when blank
  • Chýbajúci alebo prázdny vstup vráti null.
  • Int znamená celé jednotky; JSON float sa zmení na najkratší desatinný zápis, ktorý float presne vystihuje, takže 1.1 je 110 centov, nie 111.
  • Mena sa berie z argumentu, potom zo vstupu v currencyKey a nakoniec z money.default_currency.
  • Sumy nad 2⁵³ posielajte ako JSON reťazce a vopred ich overte cez MoneyAmount.

Kolekcie

$order->items->sumMoney(
    fn ($item) => $item->price->multiply($item->quantity),
    currencyIfEmpty: 'EUR',
);

$prices->minMoney();              // the items are Money
$products->maxMoney('price');     // a key or property path
$products->avgMoney('price');     // rounds once with money.rounding

sumMoney, minMoney, maxMoney a avgMoney fungujú na Collection aj LazyCollection (Eloquent kolekcie ich dedia). Hodnota je null (položky sú Money), kľúč či cesta k vlastnosti alebo callback. Prázdne kolekcie sa správajú ako Money::sum/min/max/average.

API resource

use RoundlyConsulting\Money\Http\Resources\MoneyResource;

return ['price' => MoneyResource::from($product->price)];
// {"minor":"1050","decimal":"10.50","currency":"USD","exponent":2,"formatted":"$10.50"}

MoneyResource::from() vráti pre null hodnotu null. Pole formatted používa zaregistrovaný formátovač v lokalite aplikácie a slúži len na zobrazenie — klienti by mali počítať s minor.

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.