阅读时长:10分钟

技术预备:PHP基础语法

本章我们主要讲解ThinkPHP的基础概况和Web服务端开发中常用的MVC结构。

一、入口文件

还记得我们上一章是怎么输出Helloworld的吗?

没错,就是在浏览器中输入了 http://localhost/tp5_demo/public/

这个URL表示了访问htdocs文件夹下的/tp5_demo/public/index.php文件,这是为什么呢,我们下面来一步步分解。

当我们输入 http://localhost 的时候,Apache就会访问其httpd.conf文件下指定的DocumentRoot路径,在赵童鞋这里就是E:/xampp7/htdocs。

而在后面拼接/tp5_demo/public的意思就是访问DocumentRoot路径下的/tp5_demo/public文件夹。

那么最终为什么会定位到index.php文件呢?这是因为httpd.conf文件里有另一个属性定义DirectoryIndex,这个属性中就定义了index.php、index.html等文件作为入口文件。(啥?你说为啥没图?自己翻你们的httpd.conf文件去)

而在ThinkPHP中,如果没有指定访问地址,默认就会路由到index模块下的Index控制器中的index()方法。

也就是说,输入

http://localhost/tp5_demo/public/

http://localhost/tp5_demo/public/index/index/index

是同样的效果。

二、控制器(Controller)

在MVC架构中,控制器一般只负责如下功能:

  • 参数校验
  • 调用服务
  • 调用模型
  • 输出结果

在ThinkPHP框架中建立控制器只需要在对应的模块中的controller模块中新建一个类。

如上图则表示在index模块中建立了Index控制器。

而Index控制器下的index()方法即代表一个Action,在API开发中也就是一个接口,可以通过配置框架的路由URL进行绑定。

需要注意的是,Action中其实不应该出现太多的逻辑操作,Action应该只是作为模型层(Model)和视图层(View)的一个调用者,实际的逻辑操作应该是放到模型层去进行处理,更复杂的逻辑应该放在服务层(Service)去进行处理,这种分层的思想就是所谓的面向切面编程(AOP)。

这样做的好处就是当某个通用操作(如用户登录、计算活动金额)发生变化的时候,只需要在模型中修改代码,并不会影响到调用模型的控制器代码。

而如果把逻辑都放在控制器中,那么一旦需要修改代码的时候,就要把所有关联到的控制器代码全部修改一遍。

赵童鞋就见过把所有逻辑放在控制器,完全不用模型的项目,写的时候不需要考虑分层,不需要考虑迭代,爽得很。

但是当需求发生变更的时候,维护的程序员就只想XXOO了。。

三、模型(Model)

模型定义一般为一个模型类对应一个数据表。

服务端开发中大部分的逻辑操作其实就是在Select/Create/Update/Delete各种数据表。

一些简单的逻辑操作,如:获取ID为75的文章数据。应该放在模型中封装为一个方法,在控制器层去进行调用。

ThinkPHP框架为模型提供了许多便捷功能,如:隐藏字段、字段修改器、分页查询、定义关联关系。

我们会在后面再来详细介绍模型与这些功能。

四、视图(View)

视图层就是输出对应的HTML代码。

在框架中可以使用模板引擎(如:ThinkPHP自带引擎、Smarty引擎)来进行变量替换。

但是现在服务端比较流行的都是API开发,通过API传递数据与前端进行交互,比较少使用视图来进行页面渲染。

五、路由(Route)

许多的PHP框架中都具有路由这个功能,甚至在Vue、React之类的前端框架中也加入了路由这个概念。

路由其实就是我们的访问URL和控制器中的Action做了一个映射,如上面提到的:

http://localhost/tp5_demo/public/index/index/index

就是访问index模块中的Index控制器下的index()方法。

我们可以来尝试一下,在Index控制器中加入hello()方法:

访问URL: http://localhost/tp5_demo/public/index/index/hello

可以看到,成功的输出了

“Here is hello action”。

这个URL的实际意思就是访问index模块下的Index控制器中的hello方法。

路由还有许多强大的功能,我们将会在后续的章节中进行介绍。

六、总结

本章我们介绍了现在流行的MVC三大件的基本用途,以及路由的概念。

童鞋们应该大概掌握了一个后端接口的工作流程,也就是:路由->控制器->模型(->视图)。

下一章节开始我们就会详细的介绍各组件的实际用法。

附录一、隐藏index.php文件

不知道童鞋们有没有发现本篇文章中有个bug呢?

没错,我们在入口文件时说过,当访问 http://localhost/tp5_demo/public/

Apache会自动访问到public目录下的index.php文件。

但是为什么访问 http://localhost/tp5_demo/public/index/index/hello

不需要在URL中带上这个文件呢?

我们可以在public目录下找到一个.htaccess文件,就是它帮我们隐藏掉了index.php。

现在把其中的代码屏蔽掉,并重启Apache。

再次访问 http://localhost/tp5_demo/public/index/index/index。

浏览器会返回404。

而如果我们访问 http://localhost/tp5_demo/public/index.php/index/index/index。

页面成功输出了Helloworld。

附录二、虚拟域名

知道了入口文件规则之后,童鞋们有没有觉得每次访问接口,需要输入项目路径很麻烦呢?我们接下来配置一个本地虚拟域名。

首先编辑Apache目录下的httpd-vhosts.conf文件,输入以下代码:

然后编辑我们本机的hosts文件,Windows10下的路径为:

C:/Windows/System32/drivers/etc/hosts

输入以下代码:

127.0.0.1 tp5.com

重启一下我们xampp的Apache,然后在浏览器中输入 tp5.com ,如果能看到依旧输出Helloworld,那就代表配置成功了。(配置出现问题的童鞋可在公众号后台给赵童鞋留言哦)

配置完毕后,我们以后只需要访问tp5.com这个地址,就能直接访问绑定好的项目路径。

----- End -----

更多好文

请扫描下面二维码

欢迎关注~

赵童鞋带你入门PHP(六) ThinkPHP框架入门相关推荐

  1. 《Java从入门到放弃》框架入门篇:hibernate基本配置

    hibernate是个什么玩意呢?简单点说,就是别人写好的一套访问数据库的东东,底层其实就是JDBC. 使用JDBC就像以前没有电饭煲,我们要自己根据经验,多少人煮多少米,放多少水,用多大的火,煮多长 ...

  2. 《Java从入门到放弃》框架入门篇:hibernate基本用法

    昨天我们进行了hibernate的配置,并且进行了根据ID查询对应数据的操作,今天我们来看看hibernate中的几个配置文件,里面到底有什么东东. 一.hibernate.cfg.xml <h ...

  3. 《Java从入门到放弃》框架入门篇:hibernate中的多表对应关系(二)

    前一篇讲完了一对多的关系,通过与JDBC对比应该能发现,是不是比JDBC简单了很多? 我们只需要把对象只间的包含或对应关系理清楚,完全不用我们自己来写SQL语句.所以使用hibernate框架后,我们 ...

  4. 《Java从入门到放弃》框架入门篇:使用kaptcha验证码框架

    使用kaptcha框架实现的验证码效果如下图 使用该验证码框架的步骤如下: 一.引入 kaptcha-2.3.2.jar(点击下载) 文件. 二.在web.xml中配置验证码Servlet. < ...

  5. 《Java从入门到放弃》框架入门篇:SpringBoot+mybatis使用注解方式实现mapper

    上一篇说到springboot+mybatis可以完全注解不用配置文件,本篇主要将mapper.xml文件改为纯注解方式. 原AuthorMapper.xml文件内容如下: <?xml vers ...

  6. WCF开发入门的六个步骤

    在这里我就用一个据于一个简单的场景:服务端为客服端提供获取客户信息的一个接口读取客户信息,来完成WCF开发入门的六个步骤. 1.       定义WCF服务契约 A.      项目引用节点右键添加引 ...

  7. 带你走进MySQL数据库(MySQL入门详细总结一)

    导读:关于MySQL用三篇文章带你进入MySQL的世界. 带你走进MySQL数据库(MySQL入门详细总结二) 带你走进MySQL数据库(MySQL入门详细总结三) 文章目录 1.MySQL 2.My ...

  8. C语言程序设计入门学习六步曲,六步带你入门C语言

    C语言是面向过程的,而C++是面向对象的 C和C++的区别:         C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理 ...

  9. .NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用

    写在前面 上面文章我给大家介绍了Dapper这个ORM框架的简单使用,大伙会用了嘛!本来今天这篇文章是要讲Vue的快速入门的,原因是想在后面的文章中使用Vue进行这个CMS系统的后台管理界面的实现.但 ...

最新文章

  1. emwin生成c文件格式的汉字库,GB2312编码,模拟器可用
  2. hdu1846巴什博弈(java)
  3. Swift - final关键字的介绍,以及使用场景
  4. 如何迁移 Flink 任务到实时计算
  5. 04Prism WPF 入门实战 - Module
  6. java的import和python的import对比_import导入的是什么
  7. 喜茶多名员工与外卖小哥互殴 喜茶官方:辞退!
  8. linux安装 web2py,TurnkeyLinux上用于Web2Py到MySQL的DAL连接字符串
  9. python-摩尔斯电码查询器
  10. 高级软件工程课程总结
  11. 基于SPM8或CAT12进行的VBM分析
  12. Arduino 和 HC-SR04 超声波传感器 测距
  13. meson test 的 --test-args 参数
  14. mysql强行关闭回滚中的进程_mysql查询正在执行的进程
  15. 数字调制解调技术的MATLAB与FPGA实现(关盘资料源码)
  16. 虚拟机Ubuntu不能识别外接U盘
  17. IoT黑板报0112:谷歌关闭Titan无人机上网项目
  18. LR之识别图片验证码
  19. USACO Score Inflation 总分
  20. Unity多人游戏简单实例(一)快速入门

热门文章

  1. boost::hana::fill用法的测试程序
  2. boost::kruskal_minimum_spanning_tree用法的测试程序
  3. boost::fibers::launch::dispatch的用法测试程序
  4. Boost:bind绑定__cdecl(成员函数)测试程序
  5. ITK:两个图像的像素分割
  6. DCMTK:DCMTK文档
  7. VTK:Utilities之2DArray
  8. OpenCV捕获正弦波模式
  9. 在Qt Designer中使用容器
  10. C语言判断树是否为求和树(附完整源码)