PHP code example of lzpeng / php-prize-drawer
1. Go to this page and download the library: Download lzpeng/php-prize-drawer library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
lzpeng / php-prize-drawer example snippets
use Lzpeng\PrizeDrawer\Factory;
// 通过工厂类创建抽奖组件实例
$drawer = Factory::create([
'provider' => [ // 奖品配置提供器
'driver' => 'array',
'params' => [...],
],
'accessor' => [ // 奖品数量存取器
'driver' => 'model',
'params' => [...]
],
'strategy' => [ // 抽奖策略
'driver' => 'chance',
'params' => [...]
],
'filters' => [ // 奖品过滤器
'time_limit' => [ // 在指定时间内才返回"真"奖品,否则返回"假"奖品
'start_time' => '09:00',
'end_time' => '17:00',
],
'avg_by_days' => [ // 按天数比均分配奖品数量
'start_date' => '2020-04-01',
'end_date' => '2020-04-08',
]
],
'events' => [
'draw_after' => [ // 抽奖后的事件
LoggerListener::class,
NotifyListener::class,
]
]
]);
// 设置当前用户
// $drawer->setUser(new User($id, ['phone' => 13800138000]));
$drawer->setUser($openid);
// 可动态添加过滤器, 但一般情况下通过配置设置就可以了
// $drawer->addFilter($name, $filter);
// $drawer->removeFilter($name);
// 可动态添加/移除监听器, 但一般情况下通过配置设置就可以了
// $drawer->addListener('draw_after', $listener);
// $drawer->removeListener('draw_after', $listener = null);
$conn->beginTransaction(); // 一般情况下,都会使用数据库,为保证并发,需要使用事务
try {
$prize = $drawer->draw(); // 抽奖, 返回一个奖品
// do somethings
$conn->commit();
} catch(Exception $ex) {
$conn->rollBack();
// handle exception
}
// 返回奖品列表
$prizes = $drawer->prizes();