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

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_currencyEURMONEY_DEFAULT_CURRENCYMena 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.isotrueMONEY_ISO_CURRENCIESNaplniť 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.allowednull—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_length3MONEY_CURRENCY_LENGTHDĺžka varchar stĺpcov meny (3..10) a najdlhší vlastný kód. Po migrácii nemenné.
schema.precision38MONEY_PRECISIONP stĺpcov súm decimal(P, 0) (19..65); vynucuje ho cast aj MoneyAmount. Po migrácii nemenné.
roundinghalf_away_from_zeroMONEY_ROUNDINGPredvolené zaokrúhľovanie služieb (skracovanie číslic vo formátovači, avgMoney). Hodnotové objekty konfiguráciu nečítajú.
formatting.driverautoMONEY_FORMATTERauto (intl, ak je načítané, inak decimal), intl (bez rozšírenia zlyhá) alebo decimal.
formatting.localenullMONEY_LOCALEnull = podľa app()->getLocale().
formatting.displaysymbol—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.collectiontrue—Registrovať sumMoney / minMoney / maxMoney / avgMoney.
macros.requesttrue—Registrovať Request::money().
macros.bladetrue—Registrovať @money.
macros.validationtrue—Registrovať textové pravidlá currency_code a money_amount.
exchange.defaultecbMONEY_EXCHANGE_DRIVERPredvolený 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.pivotEUR—Mena na trianguláciu pre config a database. Nenastavená hodnota (null alebo prázdna) = bez pivotnej meny.
exchange.roundinghalf_evenMONEY_EXCHANGE_ROUNDINGPredvolené zaokrúhľovanie prevodov.
exchange.timezoneEurope/BerlinMONEY_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_days7MONEY_EXCHANGE_MAX_AGE_DAYSNajnovší kurz starší ako tento limit je zastaraný a odmietne sa. Aspoň 0 (0 prijme len kurz z daného dňa).
exchange.cache.enabledtrueMONEY_EXCHANGE_CACHECachovať vyhľadávania driverov database, ecb a vlastných.
exchange.cache.storenullMONEY_EXCHANGE_CACHE_STORECache store (null = predvolený).
exchange.cache.ttl3600MONEY_EXCHANGE_CACHE_TTLŽivotnosť cache v sekundách, aspoň 1 (cache vypnete cez cache.enabled).
exchange.cache.prefixmoney:exchange—Prefix kľúčov cache.
exchange.providers.config.rates[]—Statické kurzy ako desatinné reťazce: ['EUR' => ['USD' => '1.0854']].
exchange.providers.database.tablemoney_exchange_ratesMONEY_EXCHANGE_TABLETabuľka kurzov.
exchange.providers.database.modelCurrencyRate::classMONEY_EXCHANGE_MODELVymeniteľný model kurzu — CurrencyRate alebo jeho podtrieda; čokoľvek iné vyhodí InvalidMoneyConfiguration.
exchange.providers.ecb.daily_url / recent_url / history_urlecb.europa.eu—Denný, 90-dňový a úplný historický feed.
exchange.providers.ecb.timeout10MONEY_ECB_TIMEOUTHTTP timeout v sekundách, aspoň 1.
exchange.providers.ecb.retries2—Počet opakovaní po prvom pokuse, aspoň 0.
exchange.providers.ecb.max_bytes33554432—Limit veľkosti odpovede (32 MiB), aspoň 1.
exchange.providers.ecb.cache_ttl3600—Cache spracovaného feedu v sekundách, aspoň 1.
exchange.refresh.schedulefalseMONEY_EXCHANGE_SCHEDULEZaregistrovať plánovanú aktualizáciu kurzov.
exchange.refresh.cron30 16 * * 1-5—Kedy plán beží (pracovné dni o 16:30).
exchange.refresh.timezoneEurope/Berlin—Časové pásmo cron výrazu.
exchange.refresh.sourceecb—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=7

Vypí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 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.