```
<?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開發規范校驗及修復