Qimall 在/common/models/base/BaseActiveRecord.php中重新写了数据库基本操作方法,传参更方便更简洁,例如使用 getOne($params),$params['where' ] = [['id' => "ID"]],重写的方法有count()、getOne()、getUnionOne()、listCount()、lists()、listPage()。这些重新方法都是调用paramPack()对参数进行封装
Qimall在控制器上调用setData()方法进行入库操作,在入库前都需要进行参数验证,调用Yii::$app->services->validate->validate()进行参数验证,setData()方法中传入验证过的参数,然后model里面进行数据库操作
应用举例
/*
*$params[‘id'] ID
*$params[‘name'] 名称
*$params[‘type'] 类型
*$params[‘status'] 状态
*$params[‘is_warning'] 是否警告
*$params[‘command'] 需要执行的命令
*$params[‘rule'] 规则
*$params[‘created_at'] 创建时间
*/
$res = CrontabTask::setData($params);
/*
* $params 余额明细
* $count 是否显示所有页码 ture/false
* $is_array 是否返回数据 ture/false
*/
$page_data = CapitalLog::listPage($params, $count, $is_array);
在backend/contronllers/BaseController.php中重新写了beforeAction()方法,该方法主要进行访问权限控制。需要进行访问控制都需要继承该类。
/**
* Site controller
*/
class BaseController extends Controller
{
public function beforeAction($action)
{
if (!parent::beforeAction($action)) {
return false;
}
// 每页数量
$this->pageSize = Yii::$app->request->get('limit', 20);
$this->pageSize > 50 && $this->pageSize = 50;
// 判断当前模块的是否为主模块, 模块+控制器+方法
$permissionName = Yii::$app->controller->route;
// 判断是否忽略校验
if (in_array($permissionName, Yii::$app->params['noAuthRoute'])) {
return true;
}
// 开始权限校验
if (!Auth::verify($permissionName)) {
if($this->request->isAjax){
return $this->error('对不起,您现在还没获此操作的权限');
}else{
throw new ForbiddenHttpException('对不起,您现在还没获此操作的权限');
}
}
return true;
}
}