每一套系统(或是框架)都有自己独立个性的目录结构,所以 PkFrame 也不另外,PkFrame 会在一个站点(或是 WEBAPI)系统中会默认部署 7 个文件夹目录和 1 个 PHP 的引导文件,每个目录都有各自的用途,下面就罗列一下 PkFrame 的目录结构。
|—— PkConfig 项目配置层
|—— PKController 项目控制层
|—— PKExtend 项目扩展层
|—— PkFrame 框架主导层
| ├── DbDriver 数据库驱动集
| ├── Mysql.php Mysql 数据库驱动
| ├── Mysqli.php Mysql 数据库新版驱动,只支持 PHP 5.3 以上的版本
| ├── Redis.php Redis 数据库驱动
| ├── Extend 框架内部扩展
| ├── MemcacheSASL.php Memcache 阿里云版
| ├── SoapDiscovery.php SOAP 通信驱动
| ├── Init 框架初始化选项
| ├── ConfigArray.php 框架配置初始化选项
| ├── MsgTips.php (暂时不用)
| ├── PregLists.php 数据匹配表达式数据
| ├── LowVer 兼容低版本 (在新项目中可删除)
| ├── DataHandle.php 数据处理模块
| ├── Guest.php 访客数据处理模块
| ├── Location.php 当前服务器信息处理模块
| ├── Physics.php 物理对象处理模块
| ├── Cache.php 内存处理模块
| ├── Config.php 框架主体的配置信息(不建议修改)
| ├── Converter.php 转换处理模块
| ├── Driver.php 数据库处理模块
| ├── Dispatch.php 调度处理模块
| ├── Extend.php 框架扩展功能模块
| ├── Files.php 文件处理模块
| ├── Fileter.php 过滤处理模块
| ├── Formats.php 格式检测处理模块
| ├── Func.php 函数模块
| ├── Init.php 项目初始化处理模块
| ├── Request.php 请求处理模块
| ├── Route.php 路由处理模块
| ├── Statics.php 静态处理模块
|—— PKLang 项目语言层
|—— PKModel 项目数据模型层
|—— PKStorage 项目仓储层
|—— Tmp 项目临时层
| ├── sessions 会话文件夹
| ├── upload 文件上传临时存放文件夹
| ├── ……
|—— .htaccess APACHE 配置文件,里面有路由
|—— index.php 项目入口文件
以上的目录结构是在项目初始化部署后呈现出来的框架所需的目录结构,那么框架最初(就是安装包)的目录结构,只有 PkFrame(框架主层文件夹)和 index.php(项目入口文件)
在框架部署项目的时候,将安装包放置在项目的根目录下,无需任何的配置,只要在浏览器中输入项目的站点地址,也就是通过浏览器访问 index.php 系统将会对项目是否已经部署作出检测,如没有的话将自动进行项目初始化的部署,这点和其他框架是有些类似的。
那么可能有同学会产生以下的疑问
问:我可否修改上面的目录结构呢?
答:这是你的自由,但修改后出现的问题不要来找我,我在那好好的没有招惹你,你偏要来搞我出了问题只能是你自己想办法找原因了。
问:那么我是不是就不能随心所欲的扩展性的写我的系统了?
答:当然不是了,只要你不去破坏框架原有的目录结构(这个是保证框架运作的底线),你爱怎么弄就怎么弄,框架不是提供 PKExtend(用户扩展层),你可以把项目中用到扩展组件,像模板引擎(smarty)或者是其他组件程序都可以往 PKExtend 里面放,但是像这些外来的程序代码或者是用户自己的代码不要放在 PkFrame(框架主引导层)里头,这是使用框架的大忌,因为你在维护过程中会涉及到修改一旦改错将导致框架的异常出现。
问:那么多层(文件夹),程序之间的调用是否会很麻烦?
答:这个你多虑了,这个本来就是框架的职责,一个框架有多个层不足为奇,你看人家 .Net 的多层框架,这个就是小意思的了,而且框架内部本就配有路由,可方便你调用不同层之间的程序。