PHP Yii2.0框架 注册码(激活码)功能
1 视图部分
1、激活码列表
<?php
use yii\helpers\Html;
use yii\grid\GridView;
use yii\widgets\LinkPager;
/* @var $this yii\web\View */
/* @var $searchModel frontend\modules\resource\models\BranchSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */
$this->title = '激活码列表';
?>
<!--新增按钮-->
<div class="addBtn">
<?= Html::a('导出激活码', '/resource/branch/export/?brid='.$brid, ['class' => 'btn btn-success create']) ?>
</div>
<div class="branch-form">
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
'code',
['label' => '企业名称',
//通过关联模型来获取其他表的数据
'value' =>'branch.title' ],
['label' => '用户姓名',
'value' =>'member.user_name' ],
['label' => '用户手机号',
'value' => 'member.phone' ],
'act_time',
],
'pager' => [
'class' => LinkPager::className(),
'firstPageLabel' => '首页',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
'lastPageLabel' => '尾页',
'maxButtonCount' => 5,
'hideOnSinglePage' => false,
]
]); ?>
</div>
<script src="/js/jquery-1.10.2.min_65682a2.js"></script>
效果展示:
2、生成激活码页面
create部分
<?php
use yii\helpers\Html;
$this->title = '生成激活码';
?>
<div class="branch-create">
<?= $this->render('act_form', [
'branch'=>$branch
]) ?>
</div>
act_form 部分:
<?php
use yii\helpers\Html;
use yii\helpers\Url;
?>
<div class="branch-form">
<form action="<?php Url::to(['resource/branch/activationcreateok']); ?>" method="post">
<input name="_csrf-frontend" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">
<input name="brid" type="hidden" id="brid" value="<?= Html::encode($branch->id) ?>">
<label class="control-label">企业名称:</label>
<input type="text" name="brname" value="<?php echo HTML::encode($branch->title) ?>" readonly="readonly"
class="form-control">
<br>
<label class="control-label">生成数量:</label>
<input type="number" name="num" class="form-control" id='num' value="" placeholder="最大数字为99">
<br>
<p id="tishi" style="color: #FF0000"></p>
<br><br>
<input type="button" value="生 成" class="btn btn-success s-btn" id="submit">
<input type="button" value="取 消" class="btn btn-primary" id="qx">
</form>
</div>
<script src="/js/jquery-1.10.2.min_65682a2.js"></script>
<script>
$(function () {
//点击取消按钮
$("#qx").click(function () {
parent.location.reload();
});
//点击生成按钮
$("#submit").click(function () {
var val = $("#num").val();//获取激活码数量
var csrf = $('#_csrf').val();//获取token值
var brid = $('#brid').val();//获取brid的值
//进行验证
if (val.length > 2) {
$('#tishi').html('最大值为99')
} else if (val.length == '') {
$('#tishi').html('此项必填!')
} else {
$('#tishi').html('')
$.ajax({
type: 'POST',
url: "/resource/branch/createactivationok",
dataType: "json",
data: {
'num': val,
'_csrf-frontend': csrf,
'brid': brid
},
success: function (data) {
if (data.code == 200) {
alert(data.msg);
parent.location.href = '/resource/branch/index'
} else if (data.code == 405) {
alert(data.msg)
}
},
});
}
});
})
</script>
2 控制器部分
/**
* 激活码列表
* @return string
*/
public function actionActivationlist()
{
//获取企业ID
$brid = Yii::$app->request->get('id');
//查询当前企业的所有激活码
$query = Activation::find()
->where(['brid' => $brid])
->select('*');
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 8,
],
]);
return $this->render('activationlist', [
'dataProvider' => $dataProvider,
'brid' => $brid
]);
}
/**
* 激活码生成
*/
public function actionCreateactivation()
{
//获取当前企业id
$brid = Yii::$app->request->get('id');
//查询当前企业的信息
$branch = (Branch::findOne($brid));
return $this->render('activationcreate', [
'branch' => $branch
]);
}
/**
*激活码表单提交入库
*/
public function actionCreateactivationok()
{
//获取表单提交的数据
$data = Yii::$app->request->post();
//设置批次号
$batchNo = 'JHM' . date('y') . date('m') . date('d') . rand(1000000, 9999999);
//循环插入数据
for ($i = 0; $i < $data['num']; $i++) {
$model = new Activation();
$model->brid = $data['brid'];
$model->code = $this->actionCreateguid(__NAMESPACE__);
$model->batch_no = $batchNo;
$model->created_at = date('Y-m-d H:i:s', time());
$model->insert();
}
if ($model) {
return json_encode(['code' => 200, 'msg' => '恭喜!生成激活码成功!']);
} else {
return json_encode(['code' => 405, 'data' => '生成失败']);
}
}
/**
* 生成随机激活码
* @param null $namespace
* @return string
*/
public function actionCreateguid($namespace = null)
{
static $guid = '';
$uid = uniqid("", true);
$data = $namespace;
$data .= $_SERVER ['REQUEST_TIME']; // 请求那一刻的时间戳
$data .= $_SERVER ['HTTP_USER_AGENT']; // 访问者操作系统
$data .= $_SERVER ['SERVER_ADDR']; // serverIP
$data .= $_SERVER ['SERVER_PORT']; // port号
$data .= $_SERVER ['REMOTE_ADDR']; // 远程IP
$data .= $_SERVER ['REMOTE_PORT']; // port信息
//ripemd128加密方式
$hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data)));
$guid = substr($hash, 0, 8);
return $guid;
}
/**
* 激活码导出excel
* @throws \yii\db\Exception
*
*/
public function actionExport()
{
// 获取企业ID
$brid = Yii::$app->request->get('brid');
$connection = Yii::$app->db;
$sql = "select t1.code , t2.title , t3.user_name
,t3.phone,t1.act_time from activation t1 LEFT JOIN hy_industry_branch t2 on t1.brid = t2.id LEFT JOIN bas_member t3 on t1.uid = t3.id where t1.brid = $brid ";
$command = $connection->createCommand($sql);
$res = $command->queryAll();
$data = [];
foreach ($res as $v) {
$data1 = array_values($v);
array_push($data, $data1);
}
if (!empty($data)) {
$filename = $data[0][1] . '激活码';
$header = ['激活码', '企业名称', '用户姓名', '用户手机号', '激活时间'];
//调用导出Excel函数,这里用的是PHPExcel包
$this->exportEXCEL($data, $header, '第一页', $filename);
} else {
echo "<script type='text/javascript'>alert('没有数据可导出!');parent.location.href = '/resource/branch/index'</script>";
}
}
3 模型部分
<?php
namespace common\models;
use Yii;
/**
* This is the model class for table "activation".
*
* @property int $id 主键id
* @property int $uid 会员id
* @property string $username 用户名
* @property int $brid 企业id
* @property string $brname 企业名称
* @property string $code 唯一激活码
* @property string $status 会员激活状态 1: 激活 0: 未激活
* @property int $batch_no 批次号
* @property string $created_at 创建时间
* @property string $updated_at 修改时间
* @property string $deleted_at 删除时间
* @property string $act_time 激活时间
*/
class Activation extends \yii\db\ActiveRecord
{
//激活码数量
public static $num;
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'activation';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['code'], 'required'],
[['uid', 'brid'], 'integer'],
[['created_at', 'updated_at', 'deleted_at', 'act_time'], 'safe'],
[['code'], 'string', 'max' => 8],
[['code'], 'unique']
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'uid' => '用户表关联id',
'brid' => '企业表关联id',
'code' => '激活码',
'status' => '状态',
'batch_no' => '批次号',
'created_at' => '创建时间',
'updated_at' => '更新时间',
'deleted_at' => '删除时间',
'act_time' => '激活时间',
'brname' => '企业名称'
];
}
public function getBranch() {
return $this->hasOne(Branch::className(), ['id' => 'brid']);
}
public function getMember(){
return $this->hasOne(BasMember::className(),['id'=>'uid']);
}
}
数据表设计:
CREATE TABLE `activation` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
`uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '会员id',
`brid` int(5) unsigned NOT NULL DEFAULT '0' COMMENT '企业id',
`code` char(8) NOT NULL DEFAULT '' COMMENT '唯一激活码',
`status` smallint(1) unsigned zerofill NOT NULL DEFAULT '0' COMMENT '会员激活状态 1: 激活 0: 未激活',
`batch_no` varchar(20) NOT NULL DEFAULT '' COMMENT '批次号',
`act_time` timestamp NULL DEFAULT NULL COMMENT '激活时间',
`created_at` timestamp NULL DEFAULT NULL COMMENT '激活码生成时间',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '激活时为激活时间,其他情况是修改时间',
`deleted_at` timestamp NULL DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `激活码` (`code`) USING BTREE COMMENT '激活码唯一索引'
) ENGINE=InnoDB AUTO_INCREMENT=571 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='激活码表\r\n';