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

目录

前言

第一步        知识内容回顾

1、什么是MVC

2、thinkphp框架

第二步        提前准备工作

1、运行环境的搭建

1.1、phpstudy安装

1.2、composer安装(windows下)

1.3、thinkphp6安装

2、数据库的创建

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

1、创建应用目录结构

2、C:controller文件的构建

3、M:model文件的构建

4、V:view文件的构建

总结语


 

前言

        最近在给学生讲课时候,想找个最简单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层即可。这一层并不会进行实质业务的处理。

        三者之间的联系图如下:

ae759470c3cd4a2a9e4e6c14edf27f42.png

2、thinkphp框架

        ThinkPHP框架是一个快速、兼容而且简答的轻量级国产的PHP开发框架,能够简化企业级应用开发和敏捷WEB应用开发。thinkphp使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。

        thinkphp6.0的框架结构如下图所示:

71ae5a349370490f90bd552fcd1df1fd.png

第二步        提前准备工作

1、运行环境的搭建

1.1、phpstudy安装

        由于PHP环境配置相对比较复杂,因此,我们采用phpstudy这样一个PHP程序集成包来快速完成基础环境搭建。phpstudy程序包中集成了Apache、PHP、MySQL等,可以实现一次安装、无需配置即可。具体安装操作请参考官网:www.xp.cn。

3510e8c17d974456a58aede713ab1f77.png

1.2、composer安装(windows下)

        由于thinkphp从6.0版本开始,要求必须通过Composer方式来实现安装和更新,所以在安装thinkphp6之前需要先安装composer。具体安装操作可以参考官网:www.phpcomposer.com。

4161c6a8f4d04cb69d9250d0f3db9c68.png

1.3、thinkphp6安装

        打开WEB根目录。具体操作:找到phpstudy的安装目录,打开其路径下的WWW文件夹,这一层即是我们所要运行的web根目录。在该目录下的地址栏中输入cmd,然后回车,打开命令行界面。具体操作如下:

dc304973c2cd411282ce327b9fa85843.png

        在打开的命令行界面中,输入如下命令:composer create-project topthink/think tp6,其中tp6是自己定义的网站名字。这个目录就是通常所说的应用根目录。

e944e0da93014a52b0bf83a5217e65cb.png

2、数据库的创建

        通过phpstudy实现本demo中所用到的数据库的创建。具体操作为:首先打开phpstudy软件,在【首页】栏中启动Apache和MySQL两个,然后,切换到【数据库】栏中,点击上方的【创建数据库】,录入相关信息后,点击确认。如图所示:

b7c33bb6e66a4a729c762ac6fe2c7bbe.png

        返回【首页】,点击【数据库工具】,选择里面的phpMyAdmin(如果没有安装,请在【软件管理】栏中安装),用刚才创建的用户名和密码进行登录。

cf7e1be19ea84daeab62f01a22538d42.png

        登录成功后,在spd数据库中创建名为score的数据表,表中结构及数据如图所示(也可以通过下载文后的资源,把相关数据库导入进去):

68ee35ca9a7847d9a8cbb8bb94fd13bc.png

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

1、创建应用目录结构

        在应用根目录下(即上面所说的tp6目录下),打开app目录,然后在里面分别创建controller(已经存在了不用创建)、model、view三个目录。这样就完成了demo应用的目录结构创建。如图所示:

8ea720d60dfd4f79946e370d8d19a7c0.png

2、C:controller文件的构建

        在controller目录下,创建Index.php文件。并在其中编写如下代码:

6a8abe989454425ea78e1b725e38a6f6.png

        注意:

        (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文件(直接操作可能无法更改,可以通过应用程序打开后重命名)。具体的数据库连接配置为:        

6ee4dcdab7e14bd495522fed7222cee4.png

        在完成文件重命名后,打开.env文件,并在里面配置好数据库的连接。以上面创建的数据库为例,具体的数据库连接配置为: 

89eccab444a142a2b1beacbe1b856f06.png

        在完成相关配置后,进入到model目录下,创建Score.php文件。并在其中编写如下代码:

64ffe7334ae843f5a92c9a2b1413e5e9.png

        注意:

        (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文件,完成代码编写。如图所示:

d1379af90fcd4526947c4b1364e1d0c0.png

        注意:

        (1)在view目录下的规则:要对用controller中的文件,一个controller中的文件对应view下的一个文件夹,其中view下的文件夹名字要跟controller中的文件名字保持一致。

        (2)在view/Index目录下的index.html命名说明:html文件的命名可以对应到controller中的相应方法上,两者保持一致,这样在使用View::fetch(参数)时,参数就可以省略不写了。

 

总结语

        thinkphp框架中的MVC模式里面涉及到很多约定好的规则,比如controller中类文件的命名要跟其中的类名保持一致,也要跟view视图中的目录保持一致等。demo中只是给大家讲解了很简单、很固定的约定规则。具体的规则及参数配置,可能需要大家再深入学习。

 

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
V6.0.7版本发布,本版本主要针对上个版本做了一些路由修正,还意外收获了一些性能提升,是一个建议更新的版本。主要更新 修正Validate类的PHP8兼容性 改进redis驱动的append方法 修正路由匹配检测问题 优化路由变量正则规则生成 改进responseView的内容渲染 安装和更新 V6版本开始仅支持Composer安装及更新,支持上个版本的无缝更新,直接使用composer update 更新到最新版本即可。如果需要全新安装,使用:composer create-project topthink/think tpThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。全面的WEB开发特性支持最新的ThinkPHP为WEB应用开发提供了强有力的支持,这些支持包括:MVC支持-基于多层模型(M)、视图(V)、控制器(C)的设计模式ORM支持-提供了全功能和高性能的ORM支持,支持大部分数据库模板引擎支持-内置了高性能的基于标签库和XML标签的编译型模板引擎RESTFul支持-通过REST控制器扩展提供了RESTFul支持,为你打造全新的URL设计和访问体验云平台支持-提供了对新浪SAE平台和百度BAE平台的强力支持,具备“横跨性”和“平滑性”,支持本地化开发和调试以及部署切换,让你轻松过渡,打造全新的开发体验。CLI支持-支持基于命令行的应用开发RPC支持-提供包括PHPRpc、HProse、jsonRPC和Yar在内远程调用解决方案MongoDb支持-提供NoSQL的支持缓存支持-提供了包括文件、数据库、Memcache、Xcache、Redis等多种类型的缓存支持安全性框架在系统层面提供了众多的安全特性,确保你的网站和产品安全无忧。这些特性包括:XSS安全防护表单自动验证强制数据类型转换输入数据过滤表单令牌验证防SQL注入图像上传检测
+------------------------------------------------------------------- | 感谢您使用ThinkPHP开发框架 ^_^ +------------------------------------------------------------------- | 大道至简 开发由我 WE CAN DO IT,JUST THINK +------------------------------------------------------------------- | 版本信息:ThinkPHP 3.1 Release 2012/9/5 +------------------------------------------------------------------- | Copyright(c) 2006-2012 http://thinkphp.cn All rights reserved. +------------------------------------------------------------------- [ 简介 ] ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架, 遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而 诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性 能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在 社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,众多 的典型案例确保可以稳定用于商业以及门户级的开发。 经过6年的不断积累和重构,3.0版本在框架底层的定制和扩展方面趋于完善, 使得应用的开发范围和需求适应度更加扩大,能够满足不同程度的开发人员的 需求。而且引入了全新的CBD(核心+行为+驱动)架构模式,旨在打造DIY框架 和AOP编程体验,让ThinkPHP能够在不同方面都能快速满足项目和应用的需求, 并且正式引入SAE、REST和Mongo支持。 使用ThinkPHP,你可以更方便和快捷的开发和部署应用。当然不仅仅是企业级 应用,任何PHP应用开发都可以从ThinkPHP的简单和快速的特性受益。 ThinkPHP本身具有很多的原创特性,并且倡导大道至简,开发由我的开发理念, 用最少的代码完成更多的功能,宗旨就是让WEB应用开发更简单、更快速。 为此ThinkPHP会不断吸收和融入更好的技术以保证其新鲜和活力,提供WEB应 用开发的最佳实践!经过6年来的不断重构和改进,ThinkPHP达到了一个新的 阶段,能够满足企业开发复杂的项目需求,足以达到企业级和门户级的开 发标准。 [ 协议 ] ThinkPHP遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP, 甚至允许把你的ThinkPHP应用采用商业闭源发布。 具体参考LICENSE.txt内容 [ 特性 ] CBD架构:ThinkPHP3.0版本引入了全新的CBD(核心+行为+驱动)架构模式, 打造框架底层DIY定制和类AOP编程体验。利用这一新的特性,开发人员可以 方便地通过模式扩展为自己量身定制一套属于自己或者企业的开发框架。 编译机制:独创的项目编译机制,有效减少OOP开发文件加载的性能开销。 改进后的项目编译机制,可以支持编译文件直接作为入口载入,并且支持常量 外部载入,利于产品发布。 类库导入:采用基于类库包和命名空间的方式导入类库,让类库导入看起来更 加简单清晰,而且还支持自动加载和别名导入。为了方便项目的跨平台移植, 系统还可以严格检查加载文件的大小写。 URL和路由:系统支持普通模式、PATHINFO模式、REWRITE模式和兼容模式的 URL方式,支持不同的服务器和运行模式的部署,配合URL路由功能,让你随心 所欲的构建需要的URL地址和进行SEO优化工作。支持灵活的规则路由和正则路 由,以及路由重定向支持,带给开发人员更方便灵活的URL优化体验。 调试模式:框架提供的调试模式可以方便用于开发过程的不同阶段,包括开发、 测试和演示等任何需要的情况,不同的应用模式可以配置独立的项目配置文件。 只是小小的性能牺牲就能满足调试开发过程的日志和分析需要,并确保将来的 部署顺利,一旦切换到部署模式则可以迅速提升性能。 ORM :简洁轻巧的ORM实现,配合简单的CURD以及AR模式,让开发效率无处不在。 数据库:支持包括Mysql、Sqlite、Pgsql、Oracle、SqlServer、Mongo等数据库, 并且内置分布式数据库和读写分离功能支持。系统支持多数据库连接和动态切换 机制,犹如企业开发的一把利刃,跨数据库应用和分布式支持从此无忧。 查询语言:内建丰富的查询机制,包括组合查询、快捷查询、复合查询、区间 查询、统计查询、定位查询、多表查询、子查询、动态查询和原生查询,让你的 数据查询简洁高效。 动态模型:无需创建任何对应的模型类,轻松完成CURD操作,支持多种模型之间 的动态切换,让你领略数据操作的无比畅快和最佳体验。 扩展模型:提供了丰富的扩展模型,包括:支持序列化字段、文本字段、只读字 段、延迟写入、乐观锁、数据分表等高级特性的高级模型;可以轻松动态地创建 数据库视图的视图模型;支持关联操作的关联模型;支持Mongo数据库的Mongo模 型等等,都可以方便的使用。 模块分组:不用担心大项目的分工协调和部署问题,分组帮你解决跨项目的难题, 还可以支持对分组的二级域名部署支持。 模板引擎:系统内建了一款卓越的基于XML的编译型模板引擎,支持两种类型的 模板标签,融合了Smarty和JSP标签库的思想,并内置布局模板功能和标签库扩展 支持。通过驱动还可以支持Smarty、EaseTemplate、TemplateLite、Smart等其他第 三方模板引擎。 AJAX支持:内置和客户端无关的AJAX数据返回方法,支持JSON、XML和EVAL类型 返回客户端,而且可以扩展返回数据格式,系统不绑定任何AJAX类库,可随意使 用自己熟悉的AJAX类库进行操作。 SAE支持:提供了新浪SAE平台的强力支持,具备“横跨性”和“平滑性”,支持本地化 开发和调试以及部署切换,让你轻松过渡到SAE开发,打造全新的SAE开发体验。 RESTFul支持:REST模式提供了RESTFul支持,为你打造全新的URL设计和访问体验, 同时为接口应用提供了支持。 多语言支持:系统支持语言包功能,项目和分组都可以有单独的语言包,并且可以 自动检测浏览器语言自动载入对应的语言包。 模式扩展:除了标准模式外,还提供了AMF、PHPRpc、Lite、Thin和Cli模式扩展支 持,针对不同级别的应用开发提供最佳核心框架,还可以自定义模式扩展。 自动验证和完成:自动完成表单数据的验证和过滤,新版新增了IP验证和有效期验 证等更多的验证方式,配合自动完成可以生成安全的数据对象。 字段类型检测:系统会自动缓存字段信息和字段类型,支持非法字段过滤和字段类 型强制转换,确保数据写入和查询更安全。 缓存机制:系统支持包括文件方式、APC、Db、Memcache、Shmop、Sqlite、Redis、 Eaccelerator和Xcache在内的动态数据缓存类型,以及可定制的静态缓存规则,并 提供了快捷方法进行存取操作。 扩展机制:系统支持包括模式扩展、行为扩展、类库扩展、驱动扩展、模型扩展、 控制器扩展、Widget扩展在内的强大灵活的扩展机制,让你不再受限于核心的不足 和无所适从,随心DIY自己的框架和扩展应用,满足企业开发更加复杂的项目需求。 [ 要求 ] ThinkPHP3.1需要PHP5.2.0以上版本支持,可以运行在任何系统环境下面。 [ 安装 ] ThinkPHP无需安装,下载ThinkPHP核心包或者完整版之后,把解压后的目录拷贝到 你的WEB服务器或者WEB目录即可。 [ 鸣谢 ] 特别要鸣谢ThinkPHP团队和所有关注和支持ThinkPHP的用户。 [ 支持 ] 更多内容和支持请访问ThinkPHP官方网站http://thinkphp.cn/ 和论坛 http://bbs.thinkphp.cn。
<p>ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用 开发和简化企业级应用开发而诞生的。拥有众多的优秀功能和特性,经历了三年多发展的同时,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和 改进,众多的典型案例确保可以稳定用于商业以及门户级的开发。</p><p> </p><p>ThinkPHP借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,采用单一入口模式等,融合了Struts的 Action思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,在项目配置、类 库导入、模版引擎、查询语言、自动验证、视图模型、项目编译、缓存机制、SEO支持、分布式数据库、多数据库连接和切换、认证机制和扩展性方面均有独特的 表现。</p><p> </p><p>使用ThinkPHP,你可以更方便和快捷的开发和部署应用。当然不仅仅是企业级应用,任何PHP应用开发都可以从ThinkPHP的简单 和快速的特性受益。ThinkPHP本身具有很多的原创特性,并且倡导大道至简,开发由我的开发理念,用最少的代码完成更多的功能,宗旨就是让WEB应 用开发更简单、更快速。为此ThinkPHP会不断吸收和融入更好的技术以保证其新鲜和活力,提供WEB应用开发的最佳实践! ThinkPHP遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产品发布/销售。</p><p> </p><p>ThinkPHP 6.0</p><p>运行环境要求PHP7.1+,兼容PHP8.0。</p><p> </p><p>主要新特性:</p><p>采用PHP7强类型(严格模式)</p><p>支持更多的PSR规范</p><p>原生多应用支持</p><p>更强大和易用的查询</p><p>全新的事件系统</p><p>模型事件和数据库事件统一纳入事件系统</p><p>模板引擎分离出核心</p><p>内部功能间件化</p><p>SESSION/Cookie机制改进</p><p>对Swoole以及协程支持改进</p><p>对IDE更加友好</p><p>统一和精简大量用法</p>
当然可以!以下是一个使用ThinkPHP6的异步任务队列案例: 首先,你需要安装 `topthink/think-queue` 扩展包。在项目根目录下执行以下命令: ```shell composer require topthink/think-queue ``` 接下来,你需要在配置文件 `config/queue.php` 配置任务队列的连接和驱动。例如,你可以使用 Redis 驱动: ```php return [ 'default' => 'redis', 'connections' => [ 'redis' => [ 'type' => 'redis', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'select' => 0, 'timeout' => 0, 'persistent' => false, 'prefix' => '', ], ], ]; ``` 接下来,你需要创建一个队列任务类。在 `app\job` 目录下创建一个名为 `TestJob.php` 的文件,并添加以下内容: ```php <?php namespace app\job; use think\queue\Job; class TestJob { public function handle(Job $job, $data) { // 处理任务逻辑 // 这里可以执行任何你需要的操作 // 任务执行成功后删除任务 $job->delete(); } } ``` 然后,在控制器调用队列任务。在你想要调用异步任务的控制器方法添加以下代码: ```php <?php namespace app\controller; use app\job\TestJob; use think\facade\Queue; class Index { public function index() { // 推送任务到队列 Queue::push(new TestJob()); return '任务已推送到队列'; } } ``` 最后,你需要在 `app\command` 目录下创建一个名为 `QueueWorker.php` 的命令文件,用于启动队列消费者。添加以下内容: ```php <?php namespace app\command; use think\console\Command; use think\console\Input; use think\console\Output; use think\facade\Queue; class QueueWorker extends Command { protected function configure() { $this->setName('queue:work') ->setDescription('Start queue worker'); } protected function execute(Input $input, Output $output) { // 持续监听队列并执行任务 Queue::listen(); } } ``` 现在,你可以通过运行以下命令启动队列消费者: ```shell php think queue:work ``` 当你调用 `Index` 控制器的 `index` 方法时,任务会被推送到队列,并由消费者进行处理。 这就是一个使用ThinkPHP6的异步任务队列案例。你可以根据自己的需求进行修改和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ai安歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值