ThinkPHP 框架是首款中国人自己开发的PHP框架,它诞生于2006年,2007年正式发布并成型,由于采用了MVC模式进行整体设计,整个框架可以快速的生成CMS网站,如OA系统,个人网站,新闻发布系统等。下面介绍开发的简单流程和关键点。
ThinkPHP 下载
首先下载ThinkPHP完整版(http://www.thinkphp.cn),下载完成后,放置到PHP服务器(如PHPStudy等),打开框架的入口地址index.php, 关键代码如下:
// 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php';
入口地址加载了模板的核心文件ThinkPHP.php文件。
ThinkPHP 结构
文件结构
ThinkPHP
/Application - 应用目录
|-/Admin - 后台目录 (主要) 用户自行添加
|-/Common - 配置文件目录 (主要)
|-/Home - 前台目录 (主要)系统自动生成
|-/Runtime- 系统内置运行库
/Public - 公共资源目录,如CSS/JS代码、图片等
/ThinkPHP - 框架核心部分
配置结构
框架的核心部分包括ThinkPHP\Library\Think 目录下的几个文件,包括Model.class.php、 View.class.php、Controller.class.php。它们是所有MVC模式的类函数的父类。实现的业务逻辑要继承这些父类方法。
另外在ThinkPHP\Conf 目录下的Convention.php 定义了系统内置的函数和一些配置,包括数据库连接的配置。如果修改这些配置,由于Convention.php定义的是全局的配置和函数,所以要到应用目录下的局部配置文件config.php中去修改,不要在Convention.php中修改。
/* 数据库设置 */
'DB_TYPE' => '', // 数据库类型
'DB_HOST' => '', // 服务器地址
'DB_NAME' => '', // 数据库名
'DB_USER' => '', // 用户名
'DB_PWD' => '', // 密码
'DB_PORT' => '', // 端口
'DB_PREFIX' => '', // 数据库表前缀
'DB_PARAMS' => array(), // 数据库连接参数
'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志
'DB_FIELDS_CACHE' => true, // 启用字段缓存
'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8
'DB_DEPLOY_TYPE' => 0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'DB_RW_SEPARATE' => false, // 数据库读写是否分离 主从式有效
'DB_MASTER_NUM' => 1, // 读写分离后 主服务器数量
'DB_SLAVE_NO' => '', // 指定从服务器序号
MVC 结构 与快捷方法
以建立前台为例,后台设计类似与前台。前台的文件目录结构如下
Home - 前台入口目录
-Conf - 前台配置目录 可以放置数据库连接的配置项目
-Common - 前台配置函数
-Controller -控制器目录
-Model -模型目录
-View -视图目录
定义一个Test控制器的例子如下:
控制器的定义
<?php
// 申明命名空间
namespace Home\Controller;
// 导入父类的命名空间
use Think\Controller;
class TestController extends Controller{
//定义一个test方法
public function test(){
phpinfo();
}
}
根据以上的定义的控制器,可以从浏览器上访问这个控制器,访问的地址是http://localhost/index.php/Home/Test/test (假设服务器的地址是localhost,且端口设置为80)
模型的定义
在ThinkPHP中,模型的定义往往和数据库有关,我们这里连接的数据库为MySQL.定义的模型的如下:
<?php
// 申明命名空间
namespace Home\Model;
//引入父类的命名空间
use Think\Model;
class UserModel extends Model{
// 模型端验证表单的正确性
protected $_validate = array(
// 默认情况下用正则进行验证
array('verify','require','验证码必须!'),
// 在新增的时候验证name字段是否唯一
array('name','','帐号名称已经存在!',0,'unique',1),
// 当值不为空的时候判断是否在一个范围内
array('value',array(1,2,3),,2,'in'),
// 验证确认密码是否和密码一致
array('repassword','password','确认密码不正确',0,'confirm'),
// 自定义函数验证密码格式
array('password','checkPwd','密码格式不正确',0,'function'),
);
}
视图的定义
视图是为了显示控制器的内容,默认情况下,视图HTML文件应该放在Home/View/Test/test.html. 其中Test目录与控制器的名称相同(TestController 除掉Controller),test.html文件名与方法名test相同,这样相同可以顺利找到对应的视图。
test要显示控制器的方法,要使用到ThinkPHP 定义的模板标签。默认情况下,控制器中的对象方法在HTML使用要使用如下格式:{$对象名}
对于快捷函数要使用的格式如下:{:U(‘test’)}(获取test方法的路径地址)
volist/foreach/if 标签
<volist name="对象名" id="vol">....{$vol.成员对象名}...</volist>
<foreach name='对象名' item='fo'>.......</volist>
<if condition=''>...<elseif condition=''/>...<else/>... </if>
注意:css/js 文件无法解析ThinkPHP 标签,只能在HTML 文件中使用。
标签函数的定义
通过对控制器中的对象进行一定的函数封装,可以输出适合用户的需求的内容。例子如
输出10个* ,其中10这个参数是控制器传过来的参数。
//控制器端
public function test(){
// 赋值一个变量
$data=10;
// 传递参数到模板视图文件中
$this->assign('data',$data);
// 展示模板
$this->display();
}
//html模板端
<html>
......
<body>
// 格式为{$变量|函数名称=参数1,参数2}(str_repeat是PHP内置函数,它需要2个参数,###表示参数为变量本身)
{$data | str_repeat='*',###}
</body>
</htm>
快捷方法
ThinkPHP 定义了大量的快捷方法,其中常用的快捷方法包括,U方法、I方法、M方法、D方法
U方法
U方法主要是获取控制器方法的地址,在ThinkPHP中大量使用,如表单提交、跳转等,他的格式如下
U(‘控制器名称/方法名’)(控制器名称为除掉Controller的类名),在同一个控制器,控制器名称可以省略。
即U(‘方法名’)
I 方法
I方法主要是获取表单提交的内容,常用的在表单提交上,如I(‘post.’)获取所有post 提交的表达所有内容,
I(‘post.id’)获取表单中id对象的值。 I(‘get.t’)获取get方法提交的t对象值。如http://localhost/index.php/Home/Test/test/t/300, I(‘get.t’) 获取值300。
M方法
M方法是用于数据库对象的实例化,它主要是实例化父类模型,即数据库表,所以它的格式为 M(‘数据库表名’)。
D方法
D方法是用于实例化模型对象,它主要实例化定义的模型,所以它的格式为 D(‘定义的模型名称’)
- END