Perpustakaan PHP untuk menghasilkan dan memvalidasi vouchers . Kami tidak berasumsi mengenai penyimpanan dan malah menawarkan konsep Bags
yang dapat menampung sejumlah vouchers
. Tas ini dapat memvalidasi vouchers , menghasilkan vouchers baru, dan menerapkan aturan validasi di seluruh rangkaian.
composer require alancole/ vouchers
$ model = new vouchers Voucher Model ([
' owner ' => [
' required ' => true ,
' immutable ' => true ,
],
' claimed_by ' => [
' required ' => true ,
]
]);
$ collection = new vouchers Bag ( $ model );
$ collection -> fill ( 1000 );
$ voucher = $ collection -> pick ();
print $ voucher ; // FHUW-JSUJ-KSIQ-JDUI
vouchers dapat berbentuk apa saja, namun Anda dapat menggunakan vouchers VoucherModel
untuk menerapkan validasi dan struktur. Satu-satunya atribut yang diperlukan adalah code
yang secara default tidak dapat diubah.
$ voucher = new vouchers Voucher ();
print $ voucher ; // ABCD-EFGH-IJKL
Anda juga dapat meneruskan array ke voucher untuk menetapkan nilai yang sudah ada sebelumnya pada voucher. Bidang yang cocok (termasuk code
) akan divalidasi.
$ voucher = new Voucher ([ ' code ' => ' ALAN-COLE-CODE ' , ' claimed_by ' => '' , ' claimed_on ' => '' ]);
print $ voucher ; // "ALAN-COLE-CODE"
Nilai apa pun yang diteruskan pada pembuatan voucher dapat diperoleh dan disetel menggunakan get()
dan set()
pada voucher.
$ voucher -> set ( ' owner ' , ' Alan ' );
echo $ voucher -> get ( ' owner ' ); // Alan
Dengan membuat model Anda dapat mengatur nilai default dan validasi pada vouchers yang dibuat atau dimuat. Model diteruskan sebagai array ke vouchers VoucherModel
$ model = new vouchers Voucher Model ([
' owner ' => [
' required ' => true ,
' immutable ' => true ,
],
' claimed_by ' => [
' required ' => true ,
]
]);
Jika Anda menetapkan atribut voucher sebagai immutable
maka Voucher
akan memunculkan pengecualian ImmutableData
.
Anda dapat mengubah cara kode dihasilkan dengan pengaturan generator pada suatu model. Generator harus mengimplementasikan vouchers VoucherCodeGeneratorInterface
namespace My Voucher Generator ;
use vouchers Voucher Code Interface as Generator ;
class MyCode implements Generator
{
public function part ()
{
return bin2hex ( openssl_random_pseudo_bytes ( 2 ));
}
public function generate ()
{
return strtoupper ( sprintf ( " %s-%s-%s " , $ this -> part (), $ this -> part (), $ this -> part ()));
}
public function validate ()
{
return true ;
}
}
Kemudian beri tahu model untuk menggunakan generator ini.
$ model = new vouchers Voucher Model ([
' code ' => [
' generator ' => My Voucher Generator MyCode::class
]
]);
Tas bertindak sebagai koleksi vouchers dan memungkinkan Anda menerapkan validasi pada keseluruhan rangkaian. Tas juga dapat bertindak sebagai pemilih vouchers , memungkinkan Anda memilih voucher secara acak dan menerapkan aturan dalam pemilihan tersebut. Tas juga Iterable
sehingga dapat digunakan secara berulang.
$ collection = new vouchers Bag ();
$ collection -> fill ( 1000 );
foreach ( $ collection as $ voucher ) {
print $ voucher ;
}
Anda dapat menggunakan vouchers VoucherModel
untuk menerapkan model pada semua item di dalam tas dengan meneruskan model sebagai atribut pertama pada konstruksi.
$ collection = new vouchers Bag ( $ model );
Anda dapat mengisi model dengan vouchers yang ada dengan menggunakan add()
add hanya akan menerima instance vouchers Voucher
$ vouchers = [ $ voucher1 . . . $ voucher100 ];
foreach ( $ vouchers as $ voucher ) {
$ collection -> add ( new vouchers Voucher ( $ voucher ));
}
Anda juga dapat menjalankan peta pada array apa pun, memetakan pengembalian sebagai vouchers baru di dalam tas. Ini berguna jika Anda perlu mengubah data agar sesuai dengan model.
$ collection -> map ( $ vouchers , function ( $ voucher ) {
return new vouchers Voucher ( $ voucher );
});
Anda bisa mendapatkan voucher dengan kode yang dapat digunakan untuk melihat apakah ada voucher.
$ collection = new vouchers Bag ();
$ voucher = new vouchers Voucher ([ ' code ' => ' special-voucher ' ]);
$ collection -> add ( $ voucher );
$ v = $ collection -> find ( " special-voucher " );
if ( $ v ) {
print ( string ) $ v ;
} else {
print " Voucher does not exist. " ;
}
Anda dapat meminta tas mengambilkan voucher secara acak dengan menggunakan pick()
pada tas mana pun.
$ collection = new vouchers Bag ();
$ collection -> fill ( 1000 );
$ collection -> pick ();
Jika Anda ingin memvalidasi pilihan, Anda dapat meneruskan panggilan balik untuk memilih mana yang akan dijalankan hingga mengembalikan nilai true
atau melemparkan pengecualian vouchers ExceptionsNoValid vouchers
.
$ collection -> pick ( function ( $ voucher ) {
return ( bool ) $ voucher -> owner == " Alan " ;
});
try {
$ collection -> pick ( function ( $ voucher ) {
return 2 == 1 ;
});
} catch ( Exception $ e ) {
print $ e -> getMessage ();
}
Anda juga dapat meminta pick()
untuk memeriksa semua validator yang mungkin dimiliki tas ini (lihat Validasi) dan hanya mengembalikan voucher yang valid. Sekali lagi ini akan membuang vouchers ExceptionsNoValid vouchers
jika tidak menemukan voucher.
$ collection -> pickValid ();
Anda dapat menambahkan validator ke tas, validator ini dapat digunakan untuk memvalidasi persyaratan voucher menggunakan validate()
pada tas dan meneruskan kode voucher sebagai parameter.
$ collection -> validate ( " ALAN-COLE-CODE " );
Validator dapat ditambahkan sebagai panggilan balik ke fungsi validator, atau sebagai kelas yang mengimplementasikan vouchers VoucherValidator
berikut adalah contoh yang mengasumsikan voucher memiliki expire_date
dan memeriksa bahwa voucher tersebut belum lewat.
$ collection -> validator ( function ( $ voucher ) {
return $ voucher -> expire_date > new DateTime ();
}, " Sorry, this voucher is expired " );
try {
$ collection -> validate ( " ALAN-COLE-CODE " );
} catch ( vouchers Exceptions VoucherNotValid $ e ) {
return $ e -> getMessage (); // "Sorry, this voucher is expired";
}
Ini menunjukkan cara mendapatkan vouchers dari api langganan, mengambil voucher yang diminta, memvalidasinya, dan mengklaimnya di API.
$ api = new Discovery Subscriptions Api ();
$ api -> setApiKey ( getenv ( " SUBS_API_KEY " ));
$ api -> setAppId ( getenv ( " SUBS_APP_ID " ));
$ vouchers = $ api -> getAll vouchers ();
$ bag = new vouchers Bag ();
$ bag -> map ( $ vouchers , function ( $ voucher ) {
return new vouchers Voucher ( $ voucher );
});
# Add some validators
$ bag -> validator ( function ( $ voucher ) {
return $ voucher -> owner == " Eurosport " ;
}, " Sorry, this voucher was not valid. " );
$ bag -> validator ( function ( $ voucher ) {
return ! $ voucher -> used ;
}, " Sorry, this voucher has been used. " );
$ bag -> validator ( function ( $ voucher ) {
return new DateTime ( $ voucher -> valid_till ) < new DateTime ();
}, " Sorry, this voucher is expired. " );
try {
$ voucher = $ collection -> validate ( filter_val ( INPUT_POST , " voucher_code " , FILTER_SANITIZE_STRING ));
$ voucher -> set ( " used " , true // not really needed.
$ api -> putVoucherClaim ( $ voucher ); // because this takes care of it.
} catch ( vouchers Exceptions VoucherNotValid $ e ) {
echo $ e -> getMessage ();
}