Konfigurácia
Balík funguje bez akejkoľvek konfigurácie. Publikovaný config/money.php v plnom znení:
return [
'default_currency' => env('MONEY_DEFAULT_CURRENCY', 'EUR'),
'currencies' => [
'iso' => env('MONEY_ISO_CURRENCIES', true),
'custom' => [],
'allowed' => null,
],
'schema' => [
'currency_length' => env('MONEY_CURRENCY_LENGTH', 3),
'precision' => env('MONEY_PRECISION', 38),
],
'rounding' => env('MONEY_ROUNDING', 'half_away_from_zero'),
'formatting' => [
'driver' => env('MONEY_FORMATTER', 'auto'),
'locale' => env('MONEY_LOCALE'),
'display' => 'symbol',
'fallback' => [
'pattern' => '{sign}{amount} {code}',
'decimal_separator' => '.',
'thousands_separator' => ',',
],
],
'macros' => [
'collection' => true,
'request' => true,
'blade' => true,
'validation' => true,
],
'exchange' => [
'default' => env('MONEY_EXCHANGE_DRIVER', 'ecb'),
'chain' => ['database', 'ecb'],
'pivot' => 'EUR',
'rounding' => env('MONEY_EXCHANGE_ROUNDING', 'half_even'),
'timezone' => env('MONEY_EXCHANGE_TIMEZONE', 'Europe/Berlin'), // "today" for undated lookups
'max_age_days' => env('MONEY_EXCHANGE_MAX_AGE_DAYS', 7),
'cache' => [
'enabled' => env('MONEY_EXCHANGE_CACHE', true),
'store' => env('MONEY_EXCHANGE_CACHE_STORE'),
'ttl' => env('MONEY_EXCHANGE_CACHE_TTL', 3600),
'prefix' => 'money:exchange',
],
'providers' => [
'config' => [
'rates' => [], // ['EUR' => ['USD' => '1.0854']]
],
'database' => [
'table' => env('MONEY_EXCHANGE_TABLE', 'money_exchange_rates'),
'model' => env('MONEY_EXCHANGE_MODEL', RoundlyConsulting\Money\Models\CurrencyRate::class),
],
'ecb' => [
'daily_url' => 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml',
'recent_url' => 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml',
'history_url' => 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist.xml',
'timeout' => env('MONEY_ECB_TIMEOUT', 10),
'retries' => 2,
'max_bytes' => 33554432,
'cache_ttl' => 3600,
],
],
'refresh' => [
'schedule' => env('MONEY_EXCHANGE_SCHEDULE', false),
'cron' => '30 16 * * 1-5',
'timezone' => 'Europe/Berlin',
'source' => 'ecb',
],
],
];Všetky kľúče
| Kľúč | Predvolené | Env | Účel |
|---|---|---|---|
default_currency | EUR | MONEY_DEFAULT_CURRENCY | Mena pre Request::money() bez meny, parser bez tokenu meny (alebo so zdieľaným symbolom, napríklad $, ktorý táto mena používa) a money_amount bez parametra. |
currencies.iso | true | MONEY_ISO_CURRENCIES | Naplniť register pribaleným zoznamom ISO 4217 (165 mien); false = len vlastné meny. |
currencies.custom | [] | — | Ďalšie meny: kód => exponent (0..18), názov, symbol. |
currencies.allowed | null | — | Povolené meny pre vstup od používateľa (null = celý register). Musí to byť pole kódov. Uložené dáta nikdy neobmedzuje. |
schema.currency_length | 3 | MONEY_CURRENCY_LENGTH | Dĺžka varchar stĺpcov meny (3..10) a najdlhší vlastný kód. Po migrácii nemenné. |
schema.precision | 38 | MONEY_PRECISION | P stĺpcov súm decimal(P, 0) (19..65); vynucuje ho cast aj MoneyAmount. Po migrácii nemenné. |
rounding | half_away_from_zero | MONEY_ROUNDING | Predvolené zaokrúhľovanie služieb (skracovanie číslic vo formátovači, avgMoney). Hodnotové objekty konfiguráciu nečítajú. |
formatting.driver | auto | MONEY_FORMATTER | auto (intl, ak je načítané, inak decimal), intl (bez rozšírenia zlyhá) alebo decimal. |
formatting.locale | null | MONEY_LOCALE | null = podľa app()->getLocale(). |
formatting.display | symbol | — | Predvolené zobrazenie meny: symbol, code alebo none. |
formatting.fallback.pattern | {sign}{amount} {code} | — | Vzor deterministického formátovača; zástupné znaky {sign} {amount} {code} {symbol}. |
formatting.fallback.decimal_separator | . | — | Desatinný oddeľovač — bez intl ho používa aj parser. Prázdna hodnota = nenastavená → '.'. |
formatting.fallback.thousands_separator | , | — | Oddeľovač tisícov formátovača a parsera bez intl. Akýkoľvek reťazec. Jediné nastavenie, kde je prázdna hodnota hodnotou: ' ' zoskupuje medzerou a '' znamená bez symbolu zoskupenia; ',' dostane len null. |
macros.collection | true | — | Registrovať sumMoney / minMoney / maxMoney / avgMoney. |
macros.request | true | — | Registrovať Request::money(). |
macros.blade | true | — | Registrovať @money. |
macros.validation | true | — | Registrovať textové pravidlá currency_code a money_amount. |
exchange.default | ecb | MONEY_EXCHANGE_DRIVER | Predvolený driver: config, database, ecb, chain alebo vlastný. |
exchange.chain | ['database', 'ecb'] | — | Drivery, ktoré skúša driver chain, v poradí — zoznam názvov driverov, nikdy nie samotný chain. |
exchange.pivot | EUR | — | Mena na trianguláciu pre config a database. Nenastavená hodnota (null alebo prázdna) = bez pivotnej meny. |
exchange.rounding | half_even | MONEY_EXCHANGE_ROUNDING | Predvolené zaokrúhľovanie prevodov. |
exchange.timezone | Europe/Berlin | MONEY_EXCHANGE_TIMEZONE | Časové pásmo „dneška“ pre vyhľadávania a manuálne kurzy bez dátumu a pre vrátené dátumy kurzov. Zadaný dátum je vždy svojím vlastným kalendárnym dňom (Y-m-d vo vlastnom časovom pásme). |
exchange.max_age_days | 7 | MONEY_EXCHANGE_MAX_AGE_DAYS | Najnovší kurz starší ako tento limit je zastaraný a odmietne sa. Aspoň 0 (0 prijme len kurz z daného dňa). |
exchange.cache.enabled | true | MONEY_EXCHANGE_CACHE | Cachovať vyhľadávania driverov database, ecb a vlastných. |
exchange.cache.store | null | MONEY_EXCHANGE_CACHE_STORE | Cache store (null = predvolený). |
exchange.cache.ttl | 3600 | MONEY_EXCHANGE_CACHE_TTL | Životnosť cache v sekundách, aspoň 1 (cache vypnete cez cache.enabled). |
exchange.cache.prefix | money:exchange | — | Prefix kľúčov cache. |
exchange.providers.config.rates | [] | — | Statické kurzy ako desatinné reťazce: ['EUR' => ['USD' => '1.0854']]. |
exchange.providers.database.table | money_exchange_rates | MONEY_EXCHANGE_TABLE | Tabuľka kurzov. |
exchange.providers.database.model | CurrencyRate::class | MONEY_EXCHANGE_MODEL | Vymeniteľný model kurzu — CurrencyRate alebo jeho podtrieda; čokoľvek iné vyhodí InvalidMoneyConfiguration. |
exchange.providers.ecb.daily_url / recent_url / history_url | ecb.europa.eu | — | Denný, 90-dňový a úplný historický feed. |
exchange.providers.ecb.timeout | 10 | MONEY_ECB_TIMEOUT | HTTP timeout v sekundách, aspoň 1. |
exchange.providers.ecb.retries | 2 | — | Počet opakovaní po prvom pokuse, aspoň 0. |
exchange.providers.ecb.max_bytes | 33554432 | — | Limit veľkosti odpovede (32 MiB), aspoň 1. |
exchange.providers.ecb.cache_ttl | 3600 | — | Cache spracovaného feedu v sekundách, aspoň 1. |
exchange.refresh.schedule | false | MONEY_EXCHANGE_SCHEDULE | Zaregistrovať plánovanú aktualizáciu kurzov. |
exchange.refresh.cron | 30 16 * * 1-5 | — | Kedy plán beží (pracovné dni o 16:30). |
exchange.refresh.timezone | Europe/Berlin | — | Časové pásmo cron výrazu. |
exchange.refresh.source | ecb | — | Zdroj, z ktorého plán aktualizuje. |
Prostredie (env)
Bežné nastavenia sa riadia cez env, takže konfiguráciu publikujete len zriedka:
MONEY_DEFAULT_CURRENCY=EUR
MONEY_ROUNDING=half_away_from_zero
MONEY_FORMATTER=auto
MONEY_EXCHANGE_DRIVER=chain
MONEY_EXCHANGE_SCHEDULE=true
MONEY_EXCHANGE_MAX_AGE_DAYS=7Vypínanie makier
Každú pomôcku pre vývojárov — makrá kolekcií, Request::money(), @money a textové validačné pravidlá — môžete v sekcii macros vypnúť. Existujúce makro aplikácie s rovnakým názvom má vždy prednosť. Makrá Blueprintu vypnúť nemožno: závisia od nich publikované migrácie.
Prepínače zapnuté/vypnuté
Prepínače — currencies.iso, macros.*, exchange.cache.enabled a exchange.refresh.schedule — prijímajú true/false, 1/0, on/off alebo yes/no, z .env aj z publikovaného súboru; čokoľvek iné vyhodí InvalidConfigurationException z package toolkitu s názvom kľúča, takže preklep sa nikdy potichu neprečíta ako predvolená hodnota.
Striktné nastavenia
Aj všetky ostatné nastavenia sa čítajú striktne, v mieste použitia. Nenastavený kľúč — chýbajúci, null alebo prázdny ('' či len medzery, napríklad riadok MONEY_ROUNDING= v .env) — dostane predvolenú hodnotu; prítomná hodnota nesprávneho tvaru vyhodí InvalidMoneyConfiguration s názvom kľúča a nikdy sa nepretypuje ani nenahradí predvolenou:
- Celé čísla prijímajú int alebo kanonický celočíselný reťazec („30“, „-5“) v uvedenom rozsahu — „five“, „5.5“ či „1e3“ vyhodia výnimku.
- Názvy — mena, driver, časové pásmo, tabuľka, cache store a prefix, URL, locale, vzor — musia byť reťazce.
- Režimy zaokrúhľovania, formatting.driver a formatting.display musia uvádzať jednu zo svojich hodnôt.
- currencies.allowed, currencies.custom, exchange.chain a exchange.providers.config.rates musia byť polia — zoznam povolených mien zadaný reťazcom, napríklad 'EUR', vyhodí výnimku, namiesto toho, aby povolil všetky meny.
- exchange.providers.database.model musí byť CurrencyRate alebo jeho podtrieda — čokoľvek iné vyhodí výnimku, namiesto návratu k modelu balíka.
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 kryptomienOdoslaní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.