🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
目录 [TOC] ## 目录结构 ### WorkerA ```bash WorkeA // WorkeA ├── app // 应用部分 │ ├── Controller // 在这里创建你的控制器 │ │ └── Controller.php // 控制器基类 │ ├── Exceptions // 异常处理,这里可以自定义异常 │ │ └── Handler.php // 异常 Handler │ ├── Middleware // 在这里创建你的中间件 │ │ └── AppMiddleware.php // 默认中间件 │ └── Models // 在这里创建你的模型 │ │ └── Model.php // 模型基类 ├── bootstarp // 初始化引导 │ └── boot.php // 初始化 ├── config // 配置 │ ├── app.php // 应用配置 │ ├── database.php // 数据库配置 │ └── middleware.php // 中间件配置 ├── routes // 在这里创建你的路由 │ └── app.php // 默认路由 ├── tmp // 临时文件目录,你可以放一些临时文件如上传的文件等 │ └── log // 这目录会保存日志文件 ├── WorkerStart.php // 启动脚本 └── HttpsStart.php // https 启动脚本 ``` ### WorkerF ```bash WorkeF // WorkeF ├── DB // 数据库模块 │ ├── Drivers // 数据库驱动 │ │ ├── ConnectorInterface.php // 驱动的接口 │ │ ├── PDODriver.php // PDO 驱动基类 │ │ ├── Mysql.php // Mysql 驱动 │ │ ├── Pgsql.php // PostgreSql 驱动 │ │ └── Sqlite.php // Sqlite 驱动 │ ├── ConnectException.php // 自定义连接异常 │ ├── DB.php // 查询构造器门面 │ ├── Model.php // 模型类 │ └── Redis.php // redis 类 ├── Exceptions // 异常处理 │ ├── ExceptionHandler.php // 默认异常 Handler │ └── ExceptionHandlerInterface.php // 异常 Handler 接口 ├── Http // Http 模块 │ ├── Controller.php // 控制器类 │ ├── File.php // 文件类 │ ├── Middleware.php // 中间件类 │ ├── MiddlewareInterface.php // 中间件接口 │ ├── Requests.php // 请求类 │ ├── Response.php // 响应类 │ └── Route.php // 路由类 ├── Tool // 工具 │ ├── DotArr.php // 点式路径的存取工具 │ └── Pipeline.php // 管道模式工具 ├── WorkerSocket // workerman 对接部分 │ └── WorkerHttp.php // workerman http 封装部分 ├── App.php // 启动类 ├── Config.php // 配置类 ├── Error.php // 错误处理类 └── IOCContainer.php // IOC 容器类 ``` ## 框架运行流程 WorkerA 是一个轻量的框架,其运行流程并不复杂。 ### 框架的启动流程 运行 sudo php WorkerStart.php start 后会做几件事: 1、加载引导 引导文件 bootstrap/boot.php 会被加载。这个文件会加载所有的 config 和 routes 到内存,同时设置时区、默认 ExceptionHandler 等。 2、初始化 首先框架会初始化 workerman 的端口监听、进程数、日志路径等。然后在 onWorkerStart 回调中运行 WorkerF\App::init() 进行框架的初始化,包括了注册单例 (config/app/php 中配置 registers)、初始化数据库连接等。 3、注册 onMessage 回调,每当有 HTTP 请求时,回调会调用 WorkerF\App::run($con) 方法。 ### 请求处理流程 每当有 HTTP 请求时,WorkerF\App::run($con) 方法会被执行。 首先判断该请求是否通过全局中间件 (如果设置了的话),通过则交给路由进行路由分发、返回分发结果,否则直接返回中间件处理后的响应。 如果业务逻辑在运行中抛出了异常,框架会判断用户是否设置了 ExceptionHandler 来决定选择哪个 Handler 去处理异常返回结果。 详细代码参见 [WorkerF\App](https://github.com/wazsmwazsm/WorkerF/blob/master/src/WorkerF/App.php)。 ### 路由分发 路由的分发通过 WorkerF\Http\Route::dispatch($request) 方法来执行。 首先,路由分发时会判断该请求的 path 是否存在于路由列表中。如果该路由是动态路由,还会检测该路由是否存在于路由缓存。 然后检查该请求是否通过路由中间件 (如果设置了的话)。 如果中间件检查未通过,则返回中间件处理后的结果。 如果检查通过,根据路由的设置执行闭包,或者通过 IOC 容器来执行控制器方法 (进行自动依赖注入等操作)。 详细代码参见 [WorkerF\Http\Route](https://github.com/wazsmwazsm/WorkerF/blob/master/src/WorkerF/Http/Route.php)。