20.2 ThinkPHP架构
视频讲解:光盘TMlx20ThinkPHP架构.exe
ThinkPHP遵循简洁实用的设计原则,兼顾开发速度和执行速度的同时,也注重易用性。本节内容将对ThinkPHP框架的整体思想和架构体系进行详细说明。
20.2.1 ThinkPHP的目录结构
ThinkPHP框架中的目录分为两部分:系统目录和项目目录。系统目录是下载的ThinkPHP框架类库本身的,如表20.1所示。
表20.1 系统目录
项目目录是用户实际应用的目录,如表20.2所示(ThinkPHP采用自动创建文件夹的机制,当用户布置好ThinkPHP的核心类库后,编写运行入口文件,则相关应用到的项目目录就会自动生成)。
表20.2 项目目录
20.2.2 自动生成目录
下面通过一个实例,讲解在ThinkPHP框架中如何自动生成项目目录。
【例20.1】创建名称为1的项目,自动生成项目目录。(实例位置:光盘TMsl201)
操作步骤如下:
(1)在网站根目录下创建文件夹,并命名为1。
(2)将ThinkPHP核心类库存储于1目录下。
(3)编写入口文件index.php,将其存储于1目录下。index.php文件代码如下:
<?php define('THINK_PATH', './ThinkPHP/'); //定义ThinkPHP框架路径(相对于入口文件) define('APP_NAME', '1'); //定义项目名称 define('APP_PATH', './'); //定义项目路径 require(THINK_PATH."/ThinkPHP.php"); //加载框架入口文件 ?>
在运行此文件之前,查看1项目的文件夹架构,如图20.2所示。
图20.2 项目文件夹架构
在IE浏览器中运行此项目,将输出如图20.3所示的运行结果,此为ThinkPHP提供的测试内容。此时再次查看项目文件夹,如图20.4所示,在项目根目录下自动生成项目目录。
图20.3 已连接到ThinkPHP框架
图20.4 自动生成的项目目录
20.2.3 项目目录部署方案
在实际开发过程中,目录结构往往由于项目的复杂而变得复杂。下面推荐两套标准的目录部署方案:方案一如图20.5所示;方案二采用分组模块,如图20.6所示。
图20.5 项目部署方案一
图20.6 项目部署方案二
这样部署的好处是系统目录和项目目录可以存储于非web访问目录下面,网站目录下面只需放置Public公共目录和index.php入口文件(如果是多个项目,每个项目的入口文件都需要放到Web目录下面),从而提高网站的安全性。
20.2.4 命名规范
ThinkPHP框架有其自身的一定规范,要应用ThinkPHP框架开发项目,那么就要尽量遵守它的规范。下面介绍一下ThinkPHP的命名规范。
类文件都是以.class.php为后缀(这里指的是ThinkPHP内部使用的类库文件,不代表外部加载的类库文件),使用驼峰法命名,并且首字母大写,例如Dbmysql.class.php。
函数、配置文件等其他类库文件之外的一般是以.php为后缀(第三方引入的不做要求)。
确保文件的命名和调用大小写一致,是由于在类UNIX系统上面,对大小写是敏感的(而ThinkPHP在调试模式下,即使在Windows平台也会严格检查大小写)。
类名和文件名一致(包括上面说的大小写一致),例如UserAction类的文件命名是UserAction. class.php, InfoModel类的文件名是InfoModel.class.php。
函数的命名使用小写字母和下划线的方式,例如get_client_ip。
Action控制器类以Action为后缀,例如UserAction、InfoAction。
模型类以Model为后缀,例如UserModel、InfoModel。
方法的命名使用驼峰法,并且首字母小写,例如getUserName。
属性的命名使用驼峰法,并且首字母小写,例如tableName。
以双下划线“__”打头的函数或方法作为魔法方法,例如__call和__autoload。
常量以大写字母和下划线命名,例如HAS_ONE和MANY_TO_MANY。
配置参数以大写字母和下划线命名,例如HTML_CACHE_ON。
语言变量以大写字母和下划线命名,例如MY_LANG;以下划线开头的语言变量通常用于系统语言变量,例如 _CLASS_NOT_EXIST_。
数据表和字段采用小写加下划线方式命名,例如think_user和user_name。
说明
在ThinkPHP中,有一个函数命名的特例,就是单字母大写函数,这类函数通常是某些操作的快捷定义,或者有特殊的作用,例如ADSL方法等,它们有着特殊的含义。另外,ThinkPHP默认使用UTF-8编码,所以请确保程序文件采用UTF-8编码格式保存,并且去掉BOM信息头(去掉BOM信息头有很多方式,不同的编辑器都有设置方法,也可以用工具进行统一检测和处理)。
20.2.5 项目构建流程
ThinkPHP具有项目目录自动创建功能,因此构建项目应用程序非常简单,您只需定义好项目的入口文件,在第一次访问入口文件时,系统会自动根据在入口文件中所定义的目录路径,迅速创建好项目的相关目录结构。在完成项目目录结构的创建后,看接下来都需要进行哪些工作。ThinkPHP创建项目的基本流程,如图20.7所示。
图20.7 ThinkPHP项目构建流程
【例20.2】根据上述讲解的流程,创建一个名称为2的项目,读取db_database20数据库中的数据。(实例位置:光盘TMsl202)
操作步骤如下:
(1)创建db_database20数据库,创建think_user数据表。数据表结构如图20.8所示。
图20.8 数据表结构
(2)载入ThinkPHP系统文件,编辑入口文件index.php,创建名称为2的项目。index.php文件的代码如下:
<?php define('THINK_PATH', '../ThinkPHP/'); //定义ThinkPHP框架路径 define('APP_NAME', '2'); //定义项目名称和路径 define('APP_PATH', './'); //定义项目名称和路径 require(THINK_PATH."/ThinkPHP.php"); //加载框架入口文件 ?>
(3)自动生成的项目目录中已经创建了一个空的项目配置文件,位于项目的Conf目录下面,名称是config.php。重新编辑此文件,完成数据库的配置。config.php文件的代码如下:
<?php return array( 'APP_DEBUG'=>true, //开启调试模式 'DB_TYPE'=>'mysql', //数据库类型 'DB_HOST'=>'localhost', //数据库服务器地址 'DB_NAME'=>'db_database20', //数据库名称 'DB_USER'=>'root', //数据库用户名 'DB_PWD'=>'111', //数据库密码 'DB_PORT'=>'3306', //数据库端口 'DB_PREFIX'=>'think_', //数据表前缀 ); ?>
(4)在项目的LibAction目录下,定位到自动生成的IndexAction.class.php文件,这是ThinkPHP的控制器,即Index模块。重新编辑控制器的index方法,查询指定数据表中的数据,并且完成数据的循环输出。其代码如下:
<?php class IndexAction extends Action{ public function index() { $db=new Model('user'); //实例化模型类,参数数据表名称,不包含前缀 $select=$db->select(); //查询数据 $this->assign('select', $select); //模板变量赋值 $this->display(); //输出模板 } } ?>
(5)在项目的Tpl目录下创建Index目录,存储Index模块的模板文件index.html。完成数据库中数据的循环输出,其代码如下:
<! --循环输出查询结果数据集--> <volist name='select' id='user' > ID:{$user.id}<br/> 用户名: {$user.user}<br/> 地址: {$user.address}<hr> </volist>
(6)在IE浏览器中输入http://localhost/TM/sl/20/2/index.php,其运行结果如图20.9所示。
图20.9 读取的数据
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。