最近在给学生讲课时候,想找个最简单thinkphp框架案例,来给学生们演示一下MVC思想的具体应用,但从网上找了好久,仍旧没有找到一个满意的案例。没办法,自己只能结合thinkphp6的官方文档动手写了一个简单的demo,以便在上课时候,能够让学生快速理解MVC的思想应用,增强动手能力。由于thinkphp框架主要是基于MVC思想的,所有,本演示demo对thinkphp初学者来说,也是一个非常好的应用案例。
1、什么是MVC
所谓的MVC指的是Model、View、Controller三个单词的首字母缩写。而MVC框架为开发者在设计应用程序的时候提供了一个基本的思想。通过MVC思想,我们可以把软件分割成3个部分,即Model、View和Controller,经过这样的分割后,我们就可以将数据操作和视图展示进行代码分离,便于逻辑区分,而M层和V层之间的联络,我们就可以通过在C层中设计自己的逻辑来实现。这样分割后,各个部分模块的分工就很明确了,其中的每个模块都只负责整个数据处理流程的一个部分功能。具体来说:
V(View)指的是视图层,即展示给用户的软件界面,主要用来与用户进行交互,比如说,按照一定方式展示数据,或者给用户提供一个控件来接受用户的操作。
M(Model)指的是模型层,这个模块主要用来实现与后台数据库的数据交互,比如说,对数据库的增删改查等基本操作。
C(Controller)指的是控制层,这个层处在M层和V层之间,主要用来接受V发送过来的请求并根据请求给出响应结果,如果需要操作数据库,则直接转发响应操作到M层即可。这一层并不会进行实质业务的处理。
三者之间的联系图如下:
2、thinkphp框架
ThinkPHP框架是一个快速、兼容而且简答的轻量级国产的PHP开发框架,能够简化企业级应用开发和敏捷WEB应用开发。thinkphp使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
thinkphp6.0的框架结构如下图所示:
1、运行环境的搭建
1.1、phpstudy安装
由于PHP环境配置相对比较复杂,因此,我们采用phpstudy这样一个PHP程序集成包来快速完成基础环境搭建。phpstudy程序包中集成了Apache、PHP、MySQL等,可以实现一次安装、无需配置即可。具体安装操作请参考官网:www.xp.cn。
1.2、composer安装(windows下)
由于thinkphp从6.0版本开始,要求必须通过Composer方式来实现安装和更新,所以在安装thinkphp6之前需要先安装composer。具体安装操作可以参考官网:www.phpcomposer.com。
1.3、thinkphp6安装
打开WEB根目录。具体操作:找到phpstudy的安装目录,打开其路径下的WWW文件夹,这一层即是我们所要运行的web根目录。在该目录下的地址栏中输入cmd,然后回车,打开命令行界面。具体操作如下:
在打开的命令行界面中,输入如下命令:composer create-project topthink/think tp6,其中tp6是自己定义的网站名字。这个目录就是通常所说的应用根目录。
2、数据库的创建
通过phpstudy实现本demo中所用到的数据库的创建。具体操作为:首先打开phpstudy软件,在【首页】栏中启动Apache和MySQL两个,然后,切换到【数据库】栏中,点击上方的【创建数据库】,录入相关信息后,点击确认。如图所示:
返回【首页】,点击【数据库工具】,选择里面的phpMyAdmin(如果没有安装,请在【软件管理】栏中安装),用刚才创建的用户名和密码进行登录。
登录成功后,在spd数据库中创建名为score的数据表,表中结构及数据如图所示(也可以通过下载文后的资源,把相关数据库导入进去):
1、创建应用目录结构
在应用根目录下(即上面所说的tp6目录下),打开app目录,然后在里面分别创建controller(已经存在了不用创建)、model、view三个目录。这样就完成了demo应用的目录结构创建。如图所示:
2、C:controller文件的构建
在controller目录下,创建Index.php文件。并在其中编写如下代码:
注意:
(1)文件中的类名,要跟创建的文件的类名保持一致,按照驼峰法进行命名(即首字母大写)。
(2)在类中定义的index()方法代码解读:
第一句代码:是创建Score对象。该Score类是在下面的model中定义的,所有类上面有use app\model\Score;这个语句类引入。
第二句代码:是调用Score对象的getUserName()方法来获取用户名的,其中传入的参数是用户的uid。
第三句代码:是给View视图进行全局赋值的,把获取到的$name变量的值,赋值给name,供View视图层来使用。
第四句代码:是把第三句的变量注入到View视图层中。
3、M:model文件的构建
在M层上,我们要操作MySQL数据库中的数据,所以要先完成与数据库的连接。首先找到应用根目录下(tp6目录下)的.example.env文件,进行重命名为.env文件(直接操作可能无法更改,可以通过应用程序打开后重命名)。具体的数据库连接配置为:
在完成文件重命名后,打开.env文件,并在里面配置好数据库的连接。以上面创建的数据库为例,具体的数据库连接配置为:
在完成相关配置后,进入到model目录下,创建Score.php文件。并在其中编写如下代码:
注意:
(1)在model目录中定义的文件名,要跟数据库中表的名字保持一致,并且首字母大写,同时,也要与文件中定义的类名保持一致。这是thinkphp模型中操作数据库表的一种规则。
(2)在类中定义的getUserName()方法代码解读:
第一句代码:调用自身对象去查询数据库中uid=181101的记录,并通过toArray()来转换成数组。
第二句代码:返回查询结果中的uname字段的值,读取方式按照数组的写法来用。其中的uname对应数据库中score表中的uname字段。
4、V:view文件的构建
由于thinkphp6中仅仅内置了PHP原生模板引擎,所以,我们需要单独安装think-view模板引擎驱动。找到应用根目录(tp6目录下),打开命令行界面,运行如下命令,即可完成安装。
composer require topthink/think-view
完成安装后,在view目录下,创建一个Index文件夹,并在里面创建一个index.html文件,完成代码编写。如图所示:
注意:
(1)在view目录下的规则:要对用controller中的文件,一个controller中的文件对应view下的一个文件夹,其中view下的文件夹名字要跟controller中的文件名字保持一致。
(2)在view/Index目录下的index.html命名说明:html文件的命名可以对应到controller中的相应方法上,两者保持一致,这样在使用View::fetch(参数)时,参数就可以省略不写了。
thinkphp框架中的MVC模式里面涉及到很多约定好的规则,比如controller中类文件的命名要跟其中的类名保持一致,也要跟view视图中的目录保持一致等。demo中只是给大家讲解了很简单、很固定的约定规则。具体的规则及参数配置,可能需要大家再深入学习。