Balík vyhadzuje dve vlastné výnimky so spoločným základom, niekoľko výnimiek z money-for-laravel prepúšťa bez obalenia, pri chybnom nastavení vyhodí InvalidConfigurationException z package-toolkit a vo vašich vlastných transakciách k vám môže doraziť DeadlockException z Laravelu:
| Výnimka | Kedy vznikne |
|---|---|
CreditsException | Základná trieda (RuntimeException) pre InsufficientCreditsException a BucketNotDenominatedException — zachyťte ju, ak chcete ošetriť akékoľvek zlyhanie kreditov. |
InsufficientCreditsException | Odpis by skupinu dostal pod minimum_balance a prečerpanie nie je povolené. Nesie $creditable, $requested (so znamienkom) a $available; správa z credits::messages.insufficient. |
BucketNotDenominatedException | Volanie pre Money — money(), addMoney(), deductMoney(), modifyMoney() alebo formatMoney() na scope, prípadne creditsBalanceMoney(), modifyCreditsMoney() či formatCreditsBalance() z traitu — na skupinu, ktorá nie je v credits.currencies. Nesie $bucket (vyhodnotený názov); správa z credits::messages.not_denominated. |
InvalidArgumentException | add() alebo deduct() (či addMoney() / deductMoney()) dostali zápornú sumu — na zmenu so znamienkom použite modify(). |
CurrencyMismatch | Z money: modifyCreditsMoney() dostala Money v inej mene (kód + exponent). |
AmountOverflow | Z money: suma Money sa nezmestí do 64-bitového stĺpca so znamienkom. |
UnknownCurrency | Z money: credits.currencies priraďuje skupine kód, ktorý register nepozná. |
InvalidMoneyConfiguration | Z money: credits.currencies má chybný tvar alebo credits.rounding nepomenúva žiadny režim zaokrúhľovania. |
InvalidAmount | Z money: škála zobrazenia nad 36 desatinných miest. |
InvalidConfigurationException | Z package-toolkit: hodnota v konfigurácii má chybný tvar — model, ktorý nie je Credit ani jeho podtrieda, neznámy key_type alebo primary_key_type, allow_overdraft, ktoré nie je boolean, minimum_balance, ktoré nie je celé číslo, default_bucket, ktorá nie je reťazec, scale mimo 0–36 alebo položka modifiable, ktorú nemožno zavolať. Správa uvádza názov kľúča. |
DeadlockException | Z Laravelu: vo vašej vlastnej DB::transaction() na Postgres pri REPEATABLE READ alebo SERIALIZABLE súbežná zmena toho istého vlastníka (SQLSTATE 40001). Nič sa nezapíše — zopakujte celú transakciu. |
Ošetrenie
Zachyťte konkrétne prípady, na ktoré viete reagovať, a potom siahnite po základnej triede:
use RoundlyConsulting\Credits\Exceptions\CreditsException;
use RoundlyConsulting\Credits\Facades\Credits;
use RoundlyConsulting\Credits\Exceptions\InsufficientCreditsException;
use RoundlyConsulting\Money\Exceptions\AmountOverflow;
use RoundlyConsulting\Money\Exceptions\CurrencyMismatch;
try {
Credits::for($user)->bucket('store_credit')->modifyMoney($amount, 'checkout');
} catch (InsufficientCreditsException $e) {
// not enough in the bucket: $e->requested, $e->available, $e->creditable
} catch (CurrencyMismatch | AmountOverflow $e) {
// wrong currency, or beyond the 64-bit ledger — nothing was written
} catch (CreditsException $e) {
// any other credits failure, e.g. BucketNotDenominatedException ($e->bucket)
}Odmietnutá zmena nikdy nezanechá čiastočný zápis: ochrana pred prečerpaním beží v transakcii zápisu a kontroly meny prebehnú ešte pred jej začiatkom.
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.