Generované kódy
Ak kód nezadáte, CreateCouponAction ho vygeneruje: code.length symbolov, každý rovnomerne vybraný z code.charset cez Random\Randomizer z PHP, ktorého predvolený engine je CSPRNG. Ak zákazníci kódy prepisujú ručne, vynechajte zameniteľné znaky:
// config/coupons.php
'code' => [
'length' => 8,
'charset' => 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789', // no 0/O or 1/I look-alikes
],use RoundlyConsulting\Coupons\Enums\DiscountType;
use RoundlyConsulting\Coupons\Facades\Coupons;
$coupon = Coupons::generate(DiscountType::Percentage, value: 1000); // no code given
$coupon->code; // e.g. "K7QM2XWD"Unikátnosť
Vygenerovaný kód sa porovná so všetkými existujúcimi kupónmi vrátane soft-deleted — hoci kód vyčisteného kupónu sa dá použiť znova, nový kód sa tak nikdy nezmieša s jeho históriou uplatnení. Ak je 10 kandidátov po sebe obsadených, priestor kódov je príliš malý: akcia namiesto nekonečného cyklu vyhodí InvalidCouponConfiguration s odporúčaním priestor rozšíriť alebo zadať kód explicitne.
Kódy bez ohľadu na veľkosť písmen
Na veľkosti písmen v kódoch nezáleží. Každý kód sa ukladá orezaný a veľkými písmenami — cez akciu, factory aj pri priamom zápise do modelu —, takže ' summer ' sa uloží ako SUMMER. Každé vyhľadanie kód upraví rovnako: find(), exists(), check(), preview(), redeem(), expireAll(), validačné pravidlo, whereCode(), hasRedeemed() aj route binding parametra {coupon}. Porovnávanie ani unikátnosť tak nikdy nezávisia od collation vašej databázy:
use RoundlyConsulting\Coupons\Enums\DiscountType;
use RoundlyConsulting\Coupons\Facades\Coupons;
use RoundlyConsulting\Coupons\Models\Coupon;
$coupon = Coupons::generate(DiscountType::Percentage, 1000, code: ' summer ');
$coupon->code; // "SUMMER"
Coupons::find('Summer'); // the same coupon
Coupons::exists(' SUMMER '); // true
Coupon::query()->whereCode('summer')->first(); // the same couponValidácia
Oba kľúče sa overujú pri každom generovaní kódu a hlásenie uvádza kľúč. Hlásenie o code.charset abecedu nikdy nevypíše — je to priestor, z ktorého sa losuje každý generovaný kód.
- code.length — celé číslo od 4 do 64; akceptuje sa aj celočíselný reťazec z env ako „8“, no „eight“ či „8.5“ vyhodí výnimku.
- code.charset — reťazec s aspoň 2 symbolmi, bez duplicít (bez ohľadu na veľkosť písmen), medzier, riadiacich znakov a neplatného UTF-8. Prevedie sa na veľké písmená ako každý kód, takže „a“ a „A“ sú jeden symbol; viacbajtové symboly sú v poriadku.
- Nenastavený kľúč — chýbajúci, null alebo prázdny, napríklad COUPONS_CODE_LENGTH= — sa vráti k predvolenej hodnote: 6 znakov z A–Z a 0–9.
use RoundlyConsulting\Coupons\Enums\DiscountType;
use RoundlyConsulting\Coupons\Exceptions\InvalidCouponConfiguration;
use RoundlyConsulting\Coupons\Facades\Coupons;
config()->set('coupons.code.charset', 'AaBb'); // "a" and "A" are one symbol
try {
Coupons::generate(DiscountType::Percentage, value: 1000);
} catch (InvalidCouponConfiguration $e) {
$e->getMessage();
// "Configuration value [coupons.code.charset] must not contain duplicate symbols (case-insensitively)."
}Explicitné kódy sa voči formátu nikdy nekontrolujú — zadať môžete ľubovoľný kód, napríklad LAUNCH20. Aj tak sa orežú a prevedú na veľké písmená a prázdny kód vyhodí InvalidCouponDefinition.
V príkaze about
php artisan about --only=coupons uvádza formát len podľa veľkosti, napr. „8 chars from a 32-symbol alphabet“. Nepoužiteľná hodnota sa zobrazí ako INVALID: … a príkaz nezlyhá.
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.