首页 理论教育ThinkPHP实战:快速掌握PHPMVC

ThinkPHP实战:快速掌握PHPMVC

【摘要】:接下来将使用ThinkPHP创建一个简单的MVC网站应用。通过正确修改上述配置文件信息,现在ThinkPHP就可以操作MySQL数据库了。在ThinkPHP中无论是模型的文件名,还是模型的类名都必须遵循内建的文件规则。图4-24 ThinkPHP MVC运行效果 说明:在ThinkPHP 3.0以前的版本中,视图还有主题的概念,所谓的主题是为了使网站更好地应用多模板、多风格。

为了便于学习和测试,读者可以根据4.3.3节内容将tp目录绑定为一个虚拟网站,这里绑定的域名为http://tp.localhost,本书后面的章节内容如无另外说明均在该虚拟网站中完成。接下来将使用ThinkPHP创建一个简单的MVC网站应用。

1.创建数据库

为了便于测试ThinkPHP完整的MVC处理流程,首先创建一个数据库和一个数据表,分别命名为tp(数据库)和tpk_user(数据表),tpk_user数据表SQL代码如下。

978-7-111-42852-7-Part02-60.jpg

然后向tpk_user表中插入两条测试数据,SQL代码如下所示。

978-7-111-42852-7-Part02-61.jpg

2.修改配置文件

ThinkPHP默认的数据库驱动即为MySQL,所以无须做任何修改即可连接到MySQL数据库。打开项目的配置文件home/Conf/config.php,增加MySQL数据库连接信息,如以下代码所示。

978-7-111-42852-7-Part02-62.jpg

978-7-111-42852-7-Part02-63.jpg

通过正确修改上述配置文件信息,现在ThinkPHP就可以操作MySQL数据库了。需要注意的是,由于ThinkPHP默认会使用预编译机制(即在home/Runtime目录里生成~runtime.php文件),所以每次修改完配置文件后均需要删除~runtime.php文件(可以直接清空home/Runtime目录),新的配置数据才会生效。

3.创建模型

根据MVC的设计思想,模型(Model)是用于影射数据表的,所有CURD应该都在Model中完成。但ThinkPHP有些不同,ThinkPHP允许开发人员直接在控制器中完成这些操作,不必拘泥于在自定义的Model中完成(当然也支持在自定义Model中完成)。接下来将创建一个User模型,并在该模型中实现数据查询操作。

978-7-111-42852-7-Part02-64.jpg(www.chuimin.cn)

在ThinkPHP中无论是模型的文件名,还是模型的类名都必须遵循内建的文件规则。如UserModel.class.php文件,User代表模型名称,Model为模型文件的标识,.class.php为ThinkPHP框架所规范的文件后缀名;UserModel为类名称,所有用户自定义模型都必须继承于Model或者AdvModel基础模型类。

4.创建控制器

在ThinkPHP中,控制器的命名规则和模型相同,控制器的文件标识为Action。接下来将在home/Lib/Action目录中创建一个Member控制器,文件名为MemberAction.class.php,代码如下。

978-7-111-42852-7-Part02-65.jpg

如上述代码所示,在index动作中调用了前面创建的User自定义模型,该模型中有一个get_user()方法,该方法将获取tpk_user表中的用户数据。$this->assign("data",$rows)指定了将数据输出到视图模板,接下来需要创建对应的视图模板。

5.创建视图模板

进入home/Tpl目录,在该目录中创建一个分类Member,一个控制器对应一个模板分类,然后进入Member目录,在该目录中为index动作创建视图模板,并命名index.html(ThinkPHP项目模板默认使用.html作为视图模板),代码如下所示。

978-7-111-42852-7-Part02-66.jpg

如以上代码所示,由于在index动作中分配给视图模板的数据为数组,所以需要使用循环语句遍历变量数据。在ThinkPHP3.0中,可以使用<volist>或<foreach>标签遍历数组变量,使用方式类似于Smarty中的foreach标签。同时也支持直接使用标准的PHP代码。

由于volist提供了非常灵活的特性,并且很好地将界面与逻辑进行分离,所以应该尽量避免在视图代码中嵌入PHP代码。关于ThinkPHP的视图设计,在第6章6.4节中会详细介绍,在此读者只需要了解其作用即可。最终运行结果如图4-24所示。

978-7-111-42852-7-Part02-67.jpg

图4-24 ThinkPHP MVC运行效果

‰ 说明:在ThinkPHP 3.0以前的版本中,视图还有主题的概念,所谓的主题是为了使网站更好地应用多模板、多风格。比如一个网站也许会有红色风格和黑色风格,但必须要有一个默认风格,所以ThinkPHP 2.x在创建应用时会在Tpl目录中创建一个default目录,该目录即为默认的模板风格。以本节内容为例,Member模板分类应该处于default风格下,所以index.html的路径应该为home/Tpl/default/Member/index.html。在ThinkPHP 3.0中并不是没有主题的概念,只是默认的主题为空,如果确实需要多主题,DEFAULT_THEME配置参数可以指定当前应用的主题目录。