```
<?php
//
// InitializtionService.php
// 请求前初始化控制器服务
//
// Created by lijianlin on 2019-06-14.
// Copyright 2019 lijianlin. All rights reserved.
//
namespace app\saas\behavior;
use app\common\model\Merror;
class InitializtionService
{
public function run($params)
{
// 兼容控制器分层,优化控制器目录结构
$controller = request()->controller();
$controllerArray = explode('.', $controller);
$controllerLength = count($controllerArray);
$appendControllerName = '';
if ($controllerLength == 1) {
$appendControllerName = $controllerArray[0];
} else {
for ($i = 0; $i < $controllerLength - 1; $i++) {
$appendControllerName .= strtolower($controllerArray[$i]) . '\\';
}
$appendControllerName .= ucfirst($controllerArray[($controllerLength - 1)]);
}
// $controller = '\\app\\saas\\controller\\' . request()->controller();
$controller = '\\app\\saas\\controller\\' . $appendControllerName;
$verion = request()->param('version');
$init_service = function () use ($controller, $verion, $params) {
$reflection = new \ReflectionClass($controller);
if (property_exists($controller, 'versions')
&& isset($reflection->getStaticProperties()['versions'][$verion])
) {
// 默认规则返回,在前在后不允许返回其他信息
$service = $reflection->getStaticProperties()['versions'][$verion];
// 判断控制器服务文件是否存在
return class_exists($service) ? new $service($params['tag'], $params['request']) : Merror::getInstance()->jsonApi(40006);
} else {
Merror::getInstance()->jsonApi(40001);
}
};
return is_null($verion) ? Merror::getInstance()->jsonApi(40002) : $init_service();
}
}
```
```
代码解读
run方法里面有一个参数$params,
该参数是在初始化调用的时候带过来的
['tag' => $type, 'request' => $request]
默认请求的路由的时候需要带入versoin版本
当存在version的时候,调用匿名函数 $init_service()
该方法做了一下判断:
1、反射该请求类
2、判断请求控制器中是否存在version相对应的服务器层控制器
3、判断服务层控制器是否存在,并实例化该服务层控制器
```
- 产品介绍
- 功能介绍
- 联系合作
- 修订记录
- 环境安装
- 依赖环境
- 依赖服务
- 前端环境
- 核心功能
- 流程引擎
- 流程编辑步骤
- 流程设计
- 业务表设计
- 表单设计
- 报表设计
- 节点配置
- 全局配置
- 规则引擎
- 模块功能
- 系统管理
- 平台架构
- 平台(单位)管理
- 组织架构
- 用户管理
- 角色管理
- 运维管理
- 菜单管理
- 流程管理
- 代码管理
- 字典管理
- 车型库管理
- 报表管理
- 产品管理
- 经销商管理
- 数据字典
- 业务设置
- 业务报表设置
- 系统配置
- 微信小程序设置
- OCR识别
- 钉钉通知
- 钉钉登录授权
- 云储存设置
- 服务规划
- 其他产品
- 教育点播
- 退役政务
- 三方报表
- 微信社群
- 场景名片
- 合同电子签
- TP5实用封装
- 通用封装
- Export通用封装
- Import通用封装
- 配合Import通用封装的ImportBaseVerify类
- Files通用封装
- Directory通用封装
- Pdf通用封装
- Words通用封装
- Nredis(redis封装)
- ZipArchives压缩zip文件封装
- BarQrcode条形码二维码
- Publics公共方法封装
- Curls(cUrl请求封装)
- extend扩展开发
- 何时编写扩展文件包
- 扩展文件包如何编写
- 题外话
- 常用的compose安装
- 一些建议及细节
- 实用工具
- 源码分析
- 入口文件index.php
- think\Facade类详解
- App对接Api设计
- 设计模式说明(为什么这么做)
- 代码设计逻辑方案
- 数据库备份
- 实用案例
- 如何“偷”JAVA代码
- SAAS接口设计
- 1、创建saas基类文件
- 2、初始化控制器服务
- 3、身份校验
- 4、创建登录控制器
- 5、实现登录服务层
- 6、服务层继承的service类
- 7、该案例的完整模块包
- 校验型规则校验扩展包
- 自定义规则解析(可供参考)
- 通用文件扩展包(File,Zip)
- PHP实现word转PDF功能环境搭建
- 日志通用扩展包
- 定时任务
- PHP视频处理器安装环境搭建
- 日常开发问题记录
- 1、mysql存储中带一些不可见字符
- 2、php开发规范校验及修复