Una biblioteca PHP para generar y validar vouchers . No hacemos suposiciones sobre el almacenamiento y en su lugar ofrecemos el concepto de Bags
que pueden contener cualquier cantidad de vouchers
. Estas bolsas pueden validar vouchers , generar nuevos vouchers y aplicar reglas de validación en todo el conjunto.
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 pueden adoptar casi cualquier forma; sin embargo, puede utilizar vouchers VoucherModel
para aplicar la validación y la estructura. El único atributo requerido es code
que por defecto es inmutable.
$ voucher = new vouchers Voucher ();
print $ voucher ; // ABCD-EFGH-IJKL
También puede pasar una matriz al bono para establecer valores preexistentes en el bono. Se validarán los campos coincidentes (incluido code
).
$ voucher = new Voucher ([ ' code ' => ' ALAN-COLE-CODE ' , ' claimed_by ' => '' , ' claimed_on ' => '' ]);
print $ voucher ; // "ALAN-COLE-CODE"
Cualquier valor transferido en la creación del vale se puede obtener y configurar usando get()
y set()
en el vale.
$ voucher -> set ( ' owner ' , ' Alan ' );
echo $ voucher -> get ( ' owner ' ); // Alan
Al crear un modelo, puede establecer valores predeterminados y validación de vouchers creados o cargados. Los modelos se pasan como una matriz a vouchers VoucherModel
$ model = new vouchers Voucher Model ([
' owner ' => [
' required ' => true ,
' immutable ' => true ,
],
' claimed_by ' => [
' required ' => true ,
]
]);
Si establece un atributo de vale como immutable
, entonces Voucher
generará la excepción ImmutableData
.
Puede cambiar la forma en que el generador de configuración genera el código en un modelo. Un generador debe implementar 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 ;
}
}
Luego dígale al modelo que use este generador.
$ model = new vouchers Voucher Model ([
' code ' => [
' generator ' => My Voucher Generator MyCode::class
]
]);
Las bolsas actúan como colecciones de vouchers y le permiten aplicar validaciones en un conjunto completo. Las bolsas también pueden actuar como selector de vouchers , permitiéndole elegir un vale al azar y aplicar reglas sobre esa selección. Las bolsas también son Iterable
, por lo que se pueden usar en bucles.
$ collection = new vouchers Bag ();
$ collection -> fill ( 1000 );
foreach ( $ collection as $ voucher ) {
print $ voucher ;
}
Puede utilizar vouchers VoucherModel
para aplicar un modelo a todos los artículos de una bolsa pasando un modelo como primer atributo en la construcción.
$ collection = new vouchers Bag ( $ model );
Puede completar un modelo con vouchers existentes usando add()
add solo aceptará una instancia de vouchers Voucher
$ vouchers = [ $ voucher1 . . . $ voucher100 ];
foreach ( $ vouchers as $ voucher ) {
$ collection -> add ( new vouchers Voucher ( $ voucher ));
}
También puedes ejecutar un mapa en cualquier matriz, mapeando la devolución como nuevos vouchers dentro de la bolsa. Esto es útil si necesita transformar datos para que se ajusten a un modelo.
$ collection -> map ( $ vouchers , function ( $ voucher ) {
return new vouchers Voucher ( $ voucher );
});
Puede obtener un vale por código, que se puede utilizar para ver si existe un vale.
$ 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. " ;
}
Puedes hacer que la bolsa te elija un cupón al azar usando pick()
en cualquier bolsa.
$ collection = new vouchers Bag ();
$ collection -> fill ( 1000 );
$ collection -> pick ();
Si desea validar la selección, puede pasar una devolución de llamada para seleccionar que se ejecutará hasta que devuelva un true
o arroje una excepción 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 ();
}
También puede pedirle pick()
que verifique todos los validadores que pueda tener esta bolsa (consulte Validar) y solo devuelva un vale que sea válido. Nuevamente, esto generará vouchers ExceptionsNoValid vouchers
si no encuentra un vale.
$ collection -> pickValid ();
Puede agregar validadores a una bolsa, estos validadores se pueden usar para validar los requisitos de un cupón usando validate()
en una bolsa y pasando el código del cupón como parámetro.
$ collection -> validate ( " ALAN-COLE-CODE " );
Los validadores se pueden agregar como devoluciones de llamada a la función de validación, o como una clase que implementa vouchers VoucherValidator
Aquí hay un ejemplo que supone que un vale tiene una expire_date
y verifica que no haya pasado.
$ 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";
}
Esto muestra cómo obtener vouchers de la API de suscripciones, tomar un vale solicitado, validarlo y reclamarlo en la 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 ();
}