Eine PHP-Bibliothek zum Generieren und Validieren vouchers . Wir machen keine Annahmen über die Aufbewahrung und bieten stattdessen das Konzept der Bags
an, die eine beliebige Anzahl von vouchers
aufnehmen können. Diese Taschen können vouchers validieren, neue vouchers generieren und Validierungsregeln auf das gesamte Set anwenden.
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 können fast jede Form annehmen, Sie können jedoch vouchers VoucherModel
verwenden, um die Validierung und Struktur zu erzwingen. Das einzige erforderliche Attribut ist code
, der standardmäßig unveränderlich ist.
$ voucher = new vouchers Voucher ();
print $ voucher ; // ABCD-EFGH-IJKL
Sie können dem Gutschein auch ein Array übergeben, um vorab vorhandene Werte für den Gutschein festzulegen. Übereinstimmende Felder (einschließlich code
) werden validiert.
$ voucher = new Voucher ([ ' code ' => ' ALAN-COLE-CODE ' , ' claimed_by ' => '' , ' claimed_on ' => '' ]);
print $ voucher ; // "ALAN-COLE-CODE"
Jeder bei der Gutscheinerstellung übergebene Wert kann mit get()
und set()
auf dem Gutschein abgerufen und festgelegt werden.
$ voucher -> set ( ' owner ' , ' Alan ' );
echo $ voucher -> get ( ' owner ' ); // Alan
Durch die Erstellung eines Modells können Sie Standardwerte und Validierungen für erstellte oder geladene vouchers festlegen. Modelle werden als Array an vouchers VoucherModel
übergeben
$ model = new vouchers Voucher Model ([
' owner ' => [
' required ' => true ,
' immutable ' => true ,
],
' claimed_by ' => [
' required ' => true ,
]
]);
Wenn Sie ein Gutscheinattribut als immutable
festlegen, löst Voucher
die ImmutableData
Ausnahme aus.
Sie können die Art und Weise ändern, wie der Code durch den Einstellungsgenerator für ein Modell generiert wird. Ein Generator muss vouchers VoucherCodeGeneratorInterface
implementieren
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 ;
}
}
Sagen Sie dann dem Modell, dass es diesen Generator verwenden soll.
$ model = new vouchers Voucher Model ([
' code ' => [
' generator ' => My Voucher Generator MyCode::class
]
]);
Taschen dienen als Sammlung für vouchers und ermöglichen die Durchsetzung von Validierungen für ein ganzes Set. Taschen können auch als Auswahlhilfe für vouchers dienen, sodass Sie einen Gutschein nach dem Zufallsprinzip auswählen und Regeln für diese Auswahl durchsetzen können. Taschen sind auch Iterable
sodass sie in Schleifen verwendet werden können.
$ collection = new vouchers Bag ();
$ collection -> fill ( 1000 );
foreach ( $ collection as $ voucher ) {
print $ voucher ;
}
Sie können vouchers VoucherModel
verwenden, um ein Modell für alle Artikel in einer Tasche festzulegen, indem Sie ein Modell als erstes Attribut bei der Konstruktion übergeben.
$ collection = new vouchers Bag ( $ model );
Sie können ein Modell mit vorhandenen vouchers füllen, indem Sie add()
verwenden. add akzeptiert nur eine Instanz von vouchers Voucher
$ vouchers = [ $ voucher1 . . . $ voucher100 ];
foreach ( $ vouchers as $ voucher ) {
$ collection -> add ( new vouchers Voucher ( $ voucher ));
}
Sie können auch eine Karte für jedes Array ausführen und die Rückgabe als neue vouchers im Beutel abbilden. Dies ist praktisch, wenn Sie Daten transformieren müssen, um sie an ein Modell anzupassen.
$ collection -> map ( $ vouchers , function ( $ voucher ) {
return new vouchers Voucher ( $ voucher );
});
Sie können einen Gutschein per Code erhalten, mit dem Sie sehen können, ob ein Gutschein vorhanden ist.
$ 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. " ;
}
Sie können sich von der Tasche nach dem Zufallsprinzip einen Gutschein aussuchen lassen, indem Sie pick()
für eine beliebige Tasche verwenden.
$ collection = new vouchers Bag ();
$ collection -> fill ( 1000 );
$ collection -> pick ();
Wenn Sie die Auswahl validieren möchten, können Sie einen Rückruf an pick übergeben, der so lange ausgeführt wird, bis er „ true
zurückgibt oder eine Ausnahme vom Typ vouchers ExceptionsNoValid vouchers
auslöst.
$ collection -> pick ( function ( $ voucher ) {
return ( bool ) $ voucher -> owner == " Alan " ;
});
try {
$ collection -> pick ( function ( $ voucher ) {
return 2 == 1 ;
});
} catch ( Exception $ e ) {
print $ e -> getMessage ();
}
Sie können pick()
auch bitten, alle Validatoren dieser Tasche zu überprüfen (siehe Validieren) und nur einen gültigen Gutschein zurückzugeben. Auch hier werden vouchers ExceptionsNoValid vouchers
ausgegeben, wenn kein Gutschein gefunden wird.
$ collection -> pickValid ();
Sie können einer Tasche Validatoren hinzufügen. Diese Validatoren können verwendet werden, um die Anforderungen eines Gutscheins zu validieren, indem Sie validate()
für eine Tasche verwenden und den Gutscheincode als Parameter übergeben.
$ collection -> validate ( " ALAN-COLE-CODE " );
Validatoren können als Rückrufe zur Validator-Funktion oder als Klasse hinzugefügt werden, die vouchers VoucherValidator
ist hier ein Beispiel, das davon ausgeht, dass ein Gutschein ein expire_date
hat und überprüft, ob es nicht abgelaufen ist.
$ 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";
}
Hier wird gezeigt, wie Sie vouchers von der Abonnement-API erhalten, einen angeforderten Gutschein entgegennehmen, ihn validieren und ihn über die API anfordern.
$ 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 ();
}