مكتبة 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 = 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 ();
}