ไลบรารี PHP สำหรับการสร้างและตรวจสอบ vouchers เราไม่ได้ตั้งสมมติฐานเกี่ยวกับการจัดเก็บ แต่นำเสนอแนวคิดเรื่อง Bags
ที่สามารถใช้ vouchers
จำนวนเท่าใดก็ได้แทน กระเป๋าเหล่านี้สามารถตรวจสอบ vouchers สร้าง vouchers ใหม่ และใช้กฎการตรวจสอบกับทั้งชุด
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 สามารถใช้ได้เกือบทุกรูปแบบ อย่างไรก็ตาม คุณสามารถใช้ vouchers VoucherModel
เพื่อบังคับใช้การตรวจสอบและโครงสร้างได้ แอตทริบิวต์ที่จำเป็นเพียงอย่างเดียวคือ code
ซึ่งโดยค่าเริ่มต้นจะไม่เปลี่ยนรูป
$ voucher = new vouchers Voucher ();
print $ voucher ; // ABCD-EFGH-IJKL
คุณยังสามารถส่งอาร์เรย์ไปยังบัตรกำนัลเพื่อตั้งค่าที่มีอยู่ล่วงหน้าให้กับบัตรกำนัลได้ ช่องที่ตรงกัน (รวมถึง code
) จะได้รับการตรวจสอบ
$ voucher = new Voucher ([ ' code ' => ' ALAN-COLE-CODE ' , ' claimed_by ' => '' , ' claimed_on ' => '' ]);
print $ voucher ; // "ALAN-COLE-CODE"
มูลค่าใดๆ ที่ส่งผ่านในการสร้างใบสำคัญสามารถรับและตั้งค่าได้โดยใช้ get()
และ set()
บนใบสำคัญ
$ voucher -> set ( ' owner ' , ' Alan ' );
echo $ voucher -> get ( ' owner ' ); // Alan
โดยการสร้างแบบจำลอง คุณสามารถตั้งค่าเริ่มต้นและการตรวจสอบความถูกต้อง vouchers ที่สร้างหรือโหลดได้ โมเดลจะถูกส่งผ่านเป็นอาร์เรย์ไปยัง vouchers VoucherModel
$ model = new vouchers Voucher Model ([
' owner ' => [
' required ' => true ,
' immutable ' => true ,
],
' claimed_by ' => [
' required ' => true ,
]
]);
หากคุณตั้งค่าแอตทริบิวต์ใบสำคัญเป็น immutable
Voucher
จะส่งข้อยกเว้น ImmutableData
คุณสามารถเปลี่ยนวิธีการสร้างโค้ดโดยตัวสร้างการตั้งค่าบนโมเดลได้ ตัวสร้างต้องใช้ 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 ;
}
}
จากนั้นบอกให้โมเดลใช้เครื่องกำเนิดไฟฟ้านี้
$ model = new vouchers Voucher Model ([
' code ' => [
' generator ' => My Voucher Generator MyCode::class
]
]);
กระเป๋าทำหน้าที่เป็นคอลเลกชันสำหรับ vouchers และช่วยให้คุณสามารถบังคับใช้การตรวจสอบความถูกต้องของทั้งชุดได้ กระเป๋ายังสามารถทำหน้าที่เป็นตัวเลือกสำหรับ vouchers ช่วยให้คุณสามารถเลือกบัตรกำนัลโดยการสุ่มและบังคับใช้กฎกับการเลือกนั้น กระเป๋ายัง Iterable
เพื่อให้สามารถใช้งานแบบวนซ้ำได้
$ collection = new vouchers Bag ();
$ collection -> fill ( 1000 );
foreach ( $ collection as $ voucher ) {
print $ voucher ;
}
คุณสามารถใช้ vouchers VoucherModel
เพื่อกำหนดแบบจำลองให้กับสินค้าทั้งหมดในกระเป๋าโดยการส่งแบบจำลองเป็นคุณลักษณะแรกในการก่อสร้าง
$ collection = new vouchers Bag ( $ model );
คุณสามารถเติมแบบจำลองด้วย vouchers ที่มีอยู่ได้โดยใช้ add()
add จะยอมรับเฉพาะอินสแตนซ์ของ vouchers Voucher
$ vouchers = [ $ voucher1 . . . $ voucher100 ];
foreach ( $ vouchers as $ voucher ) {
$ collection -> add ( new vouchers Voucher ( $ voucher ));
}
คุณยังสามารถเรียกใช้แมปบนอาเรย์ใดๆ ก็ได้ โดยแมปการส่งคืนเป็น vouchers ใหม่ภายในถุง สิ่งนี้มีประโยชน์หากคุณต้องการแปลงข้อมูลให้พอดีกับโมเดล
$ collection -> map ( $ vouchers , function ( $ voucher ) {
return new vouchers Voucher ( $ 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. " ;
}
คุณสามารถให้กระเป๋าเลือกบัตรกำนัลโดยการสุ่มโดยใช้ pick()
บนกระเป๋าใบใดก็ได้
$ collection = new vouchers Bag ();
$ collection -> fill ( 1000 );
$ collection -> pick ();
หากคุณต้องการตรวจสอบความถูกต้องของการเลือก คุณสามารถส่งการโทรกลับเพื่อเลือกซึ่งจะทำงานจนกว่าจะส่งคืนค่า true
หรือทิ้งข้อยกเว้น 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 ();
}
คุณยังอาจขอให้ pick()
ตรวจสอบเครื่องมือตรวจสอบความถูกต้องทั้งหมดที่กระเป๋าใบนี้อาจมี (ดูตรวจสอบความถูกต้อง) และส่งคืนเฉพาะบัตรกำนัลที่ถูกต้องเท่านั้น อีกครั้ง สิ่งนี้จะส่ง vouchers ExceptionsNoValid vouchers
ไม่พบบัตรกำนัล
$ collection -> pickValid ();
คุณสามารถเพิ่มเครื่องมือตรวจสอบลงในถุงได้ เครื่องมือตรวจสอบเหล่านี้สามารถใช้เพื่อตรวจสอบข้อกำหนดของใบสำคัญได้โดยใช้ validate()
บนถุงและส่งรหัสใบสำคัญเป็นพารามิเตอร์
$ collection -> validate ( " ALAN-COLE-CODE " );
คุณสามารถเพิ่มเครื่องมือตรวจสอบเป็นการเรียกกลับไปยังฟังก์ชันเครื่องมือตรวจสอบ หรือเป็นคลาสที่ใช้ vouchers VoucherValidator
นี่คือตัวอย่างที่ถือว่าบัตรกำนัลมี expire_date
และเช็คยังไม่ผ่าน
$ 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";
}
ข้อมูลนี้แสดงวิธีรับ vouchers จาก API การสมัครสมาชิก รับบัตรกำนัลที่ร้องขอ ตรวจสอบความถูกต้อง และอ้างสิทธิ์ใน 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 ();
}