写点什么

【PHP】thinkPHP6 中的 MVC 思想的小案例

作者:Geek_Angel
  • 2023-12-16
    山东
  • 本文字数:2953 字

    阅读完需:约 10 分钟

【PHP】thinkPHP6中的MVC思想的小案例

前言

        最近在给学生讲课时候,想找个最简单 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 的数据表,表中结构及数据如图所示(也可以通过下载文后的资源,把相关数据库导入进去):


 第三步        MVC 下的小案例(demo)

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 中只是给大家讲解了很简单、很固定的约定规则。具体的规则及参数配置,可能需要大家再深入学习。

发布于: 刚刚阅读数: 5
用户头像

Geek_Angel

关注

还未添加个人签名 2023-12-13 加入

还未添加个人简介

评论

发布
暂无评论
【PHP】thinkPHP6中的MVC思想的小案例_php_Geek_Angel_InfoQ写作社区