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();