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

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 coupon

Validá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 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.