Appearance
框架分层
代码分层
温馨提示
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',],
];