下面开始介绍ThinkPHP框架,首先为了加强感性认识,先看一看ThinkPHP工程的目录结构:
文件夹:
admin 是后台工程
home 是前台工程
public 存放CSS,js,图片
ThinkPHP 框架
ueditor 百度编辑器
admin.php 后台工程入口文件
index.php 前台工程入口文件
config.inc.php 数据库配置文件
buildpath , settings , .project 是Zend IDE生成的,不用了解
由于我这里面实际是两个工程(home和admin),只要理解其中一个即可,故下面只介绍后台,即admin部分。
接着往下看,看一下admin.php文件,这是需要了解的第一个文件,即后台的入口文件。
几个宏定义分别指明了:
1.ThinkPHP框架的路径
2.后台应用程序目录
3.后台应用程序名称
4.开启调试模式
5.包含 ThinkPHP 框架下的 ThinkPHP.php 文件(重要!!!)
下面新建一个小工程来演示一下开发过程:
比如整个大工程的目录是XXX 。然后把ThinkPHP框架拷贝进来,并添加 admin.php 文件
此时在浏览器输入::http://localhost/xxx/admin.php会自动生成admin目录,如下图
打开admin目录,内容如下:
其中主要关注四个文件夹:
1.Conf——存放工程配置文件(比如定义一些常量什么的)
2.Lib——存放MVC模式中的模型类和控制器类(最重要!!!)
3.Tpl——存放模板文件,按道理下载的模板应该放在这里
4.Runtime——存放运行时文件(比如缓存啊,数据库表缓存啊什么的)
最后贴出浏览器上的运行结果,如下:
如果能看到上面的画面,说明 ThinkPHP可以正常运行 啦。下面我们继续完善吧~~~
初识MVC模式
到这里,不得不提一下在ThinkPHP中的MVC的概念。MVC很有名,叫做 模型-视图-控制器 模式。
在ThinkPHP里面:
模型(Model)可以认为就是一张数据库表。
对于一篇文章(新闻),它的属性包括ID号,标题,作者,创建时间,最后修改时间以及文章内容。这就是一篇文章的模型。
然后就按照这个思路建立对应的数据库表:
视图(View)可以认为就是用户看到的东西,即模板,或者说皮肤。
比如前面贴出的后台模板,那个在ThinkPHP概念中就是视图。
控制器(Action)可以认为是视图与模型之前的桥梁。因为网站上显示的内容基本全部来自 众多模型们 (数据库表们),
而控制器负责的就是 决定在哪些情况下显示哪些模型里面的哪些数据 。
还是拿我的例子说,我 后台工程的首页对应的控制器是Index控制器 。(Index控制器为所有工程的默认控制器)。
但是你想,一个网站的首页一般是有很多按钮啊,超链接啊什么的,可以跳到其他地方去的东西。贴张图:
这是我的后台首页。可以看到左边有导航栏,右下边列出了数据库当前的文章信息,可以看到一共有三篇文章。
比如我现在可能想做:
1. 把文章”1111测试文章发布系统”删除
2. 把文章”詹姆斯高捧第3座MVP奖杯”改成”詹姆斯高捧第4座MVP奖杯”
3. 新添加一篇别的文章
这就对应了Index控制器的不同功能了,
也就是Index控制器类IndexAction的不同方法(比如取名edit()方法,delete()方法,add()方法)。
当然之所以会看到页面显示,是 因为默认情况下执行Index控制器的Index()方法,在该方法中调用display()方法显示模板(视图)。不信可以看默认的文件,里面的Index控制器的Index方法实现的就是HelloThinkPHP的欢迎页面 。
比如:
IndexAction目录为:
/xxx/admin/Lib/Action/IndexAction.class.php
内容为:
可以看到,默认情况下在index方法中调用了$this->display()
(注意看IndexAction 继承Action类,display方法是Action类的方法);
调用display()方法后,ThinkPHP会在对应工程的 Tpl文件夹下的Index文件下下找index.html文件 。
其中前一个Index文件夹对应的是Index控制器,index.html对应的是index()方法。
所以, 一个控制器类对应一个模板文件夹。
具体对应多少个模板跟控制器类有多少个方法以及有多少个方法需要display有关 。
故,此时对应的模板文件路径为:
/xxx/admin/Tpl/Index/index.html
细心的朋友可能要问了,你这里只说了视图(模板)和控制器啊,模型呢?你是怎么知道数据库里的那三篇文章的信息的呢?其实不然,我在index方法里面还做了一些事情,下图是精简版index方法:
可以看到,第一步,我就实例化了一个模型。模型名字是Article,前面说到模型就是数据库表,此时查看一下有哪些数据库表:
第一个表名字是think_article,可以看到还差一个前缀think_,其实这个是在配置文件中指定的,还记得前文所述的config.inc.php 吗? 其配置代码如下所示:
return array(
'DB_TYPE' =>'mysql',
'DB_HOST' =>'localhost',
'DB_NAME' =>数据库名字,
'DB_USER' =>用户名,
'DB_PWD' =>密码,
'DB_PORT' =>'3306',
'DB_PREFIX' =>'think_',
);
?>
第二条语句就是 查询数据库 。
ThinkPHP提供了很多种查询数据库的方法,我使用的是连贯操作法。
执行完第二条语句后$new_list变量就存储了所有文章的信息,那么怎么把它显示到界面上去呢?
看第三句话,它把该变量分配给了一个叫做’new_list’的变量 (好像同名了哇。。不过没关系,关键是assign方法),然后我们在模板文件里面进行替换就OK啦。默认情况下,在HTML里面写 {$new_list}就OK啦。当然,这里面的new_list是一个复合的变量,不是单纯的数字或者字符串。。不过ThinkPHP提供了很多循环的方法给我们使用,很是方便。
最后一条语句就是显示对应的视图文件了。我们就能把数据库中的文章信息按照视图(模板)里面定义的规则显示在浏览器中了。
跑通下载源码的步骤:
1.解压到网站根目录下,默认是www文件夹下的xxx文件夹:
2.在MySQL中新建一个数据库,比如rubydb,整理成utf8-genaral-ci
3.导入数据库表文件夹下的两个数据库表 think_article 和think_user,导入后入下图:
4.配置Config.inc.php文件
'mysql',
'DB_HOST' => 'localhost',
'DB_NAME' => '自己建一个数据库',//需要新建一个数据库!名字叫
'DB_USER' => '你的数据库用户名', //数据库用户名
'DB_PWD' => '你的数据库密码',//数据库登录密码
'DB_PORT' => '3306',
'DB_PREFIX' => 'think_',//数据库表名前缀
);
?>
源码下载链接