Skip to content
导航目录

框架分层

代码分层

温馨提示

1、从下往上主要分为三层:模型层model、逻辑服务层service、控制器层controller
2、上层可调用下层,不可下层反向调用上层,逻辑服务层可以平层调用
3、分层初衷是封装复用,争取重复代码不写第二遍,此类规范并无绝对标准,重在统一规范

1. 模型层model

  • 模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,示例如下
sh
//时间字段显示格式
protected $dateFormat = 'Y-m-d H:i:s';
// 开启自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
//只读字段,不允许被更改
protected $readonly = [];

//数据输出隐藏的属性
protected $hidden = ['delete_time', 'password'];

//据输出显示的属性
public static $showField = ['id','create_time'];

use ModelTrait;

2. 逻辑服务层service

  • 逻辑服务层采用驼峰法命名,并且首字母大写,名称和模型对应,后缀使用Service
  • 逻辑服务层公共方法增删改查基本操作,通过使用 use ServiceTrait 引入,另外可以加入自定义方法
  • 逻辑服务层主要职责进行业务逻辑实现
sh
//模型,带命名空间
public static $model = 'app\model\admin\Admin';
//模型主键
public static $pk = 'id';
//name字段名称
public static $name = 'username';
//引入公共方法
use ServiceTrait;

/**
	* 登录
	* @param string $username 用户名
	* @param string $password 未加密的密码
	* @return array 对象数组,包含字段:userToken,已编码的用户访问令牌;user,用户信息。
	* @throws \app\MyException
	*/
public static function login($username, $password)
{
	
}

3. 控制器层controller

  • 控制器层controller采用驼峰法命名,并且首字母大写,名称和模型对应
  • 控制器层公共方法增删改查基本操作,通过使用 use ControllerTrait; 引入;包括前置before和后置after方法处理自定义数据和权限,也可以自定义方法
  • 控制器层主要职责是和验证器一起处理请求参数,调用逻辑服务层,返回结果
sh
//服务,带命名空间
public static $service = 'app\service\admin\AdminService';
//验证器名称
public static $validateName = 'app\admin\validate\admin\Admin';
//保存验证场景
public static $validateScene = 'save';
//状态变更允许字段,格式 字段名:允许值
public static $enableField = ['is_enabled' => [0, 1]];
//引入公共方法
use ControllerTrait;

//查询条件前置处理
public function beforeIndex()
{
	//搜索参数
	$username   = input('username', '', 'trim');
	$where = true;
	if ($username) {
		$where .= " and username like '%" . $username . "%' ";
	}
	return [$where, [],['id' => 'asc'],[]];
}

//查询条件前置处理
public function beforeGetLists()
{
	return [true, ['id','realname'],[]];
}

//查询权限处理
public function beforeGetListsAuth($where)
{
	if ($this->user->group_id !== 1) {
		$where= [['id','=',$this->user->id]];
	}
	return $where;
}

/**
* 自定义方法
* @Route("getusermenu", method="POST")
*/
public function getusermenu()
{
	 
}

4. 验证器 validate (可选)

  • 验证器采用驼峰法命名,并且首字母大写,名称和模型对应
  • 验证器主要职责在数据修改时候,进行数据校验,在控制器层controller调用
sh
//验证规则
protected $rule = [
	'username' => ['require', 'max' => '25'],
];

//提示信息
protected $message = [
	'username.require'   => '账号必须',
	'username.max'       => '账号最多不能超过25个字符',
];

//验证场景
protected $scene = [
	'save'   => ['username',],
];

欢迎使用HardAdmin