ThinkPHP学习笔记(2)ThinkPHP运行流程
来源:互联网 发布:js数组复制extend 编辑:程序博客网 时间:2024/06/08 02:35
在学习笔记1中,我们已经为项目配置好了ThinkPHP框架。在第一次输入浏览器浏览项目后,ThinkPHP框架会自动为index项目(前台项目)创建index文件夹,并在文件夹下生成了如下目录:
由于开启了ThinkPHP的调试模式,所以会有缓存目录产生,否则则没有该目录。
那么,框架是如何通过url路由到对应页面并显示的呢?别急,我们先了解下ThinkPHP的设计模式MVC。
MVC模式算是比较著名的一种架构设计,MVC即
M —— Module 模型
V —— View 视图
C —— Control 控制器
通过这种模式,我们可以将整个网站认成 一种对数据的表达方式(毕竟,我们看到的任何网页,都是后台数据的体现)。MVC就可理解为 网页,是一种对数据(Module)的可视化表现(View)。而建立这种数据与表现之间的桥梁的,则是控制器(Control)。
对应的ThinkPHP将代码也分做Module,View和Control。
当在浏览器输入url的时候,ThinkPHP会自动在url的提交参数中,解析出对应的控制器Control,及控制器应该调用的函数名称。
ThinkPHP的url解析规则如下
http://网址/?m=控制器名称&a=控制器要调用的方法名称
例如 url
http://127.0.0.1/think/index.php?m=Show&a=add 则会调用控制器ShowAction的add()方法来显示页面。
但在第一篇笔记中,我们没有传任何网页名称,同时没有传任何参数,直接输入
http://127.0.0.1/think/
是怎么显示出内容的呢?
答案很简单,在没有任何网页或参数的情况下, ThinkPHP默认会访问index.php网页,同时,调用默认控制器IndexAction的index方法。
上面的情况,其实类似于以下php代码
<?php<span style="white-space:pre"></span>$control = isset($_GET['m'])?$_GET['m']:'IndexAction';$action = isset($_GET['a']) ? $_GET['a']:'index';$obj = new $control;$obj->$action();?>
那么,ThinkPHP的控制器类都是写在那些文件中,并存在于那个目录下呢?
TP(ThinkPHP)的控制器类文件, 都被放在了自动生成目录的 Lib/Action/目录下,默认的,你会看到TP自动生成的一个控制器文件
IndexAction.class.php
打开该文件,其代码类似如下
<?php// 本类由系统自动生成,仅供测试用途class IndexAction extends Action { public function index(){ echo "Hello World"; } }
而控制器类文件的命名也有讲究,为
控制器类名.class.php。
我们之后再添加控制器类,同样应该将文件放在Lib/Action/目录下,并遵循同样的文件命名及代码规则。
例如我们在添加一个Show控制器,如图所示。
那么,我们在浏览器中输入
http://127.0.0.1/think/?m=Show&a=add 或 http://127.0.0.1/think/index.php?m=Show&a=add
框架就会调用ShowAction控制器的add方法进行显示。(注意,这里url中输入的是m=Show而不应该是m=ShowAction)
而控制器类中的这些方法的意义是什么呢?其实控制器中的每个方法,均可以理解为一个页面的展示方法。即你有多少个控制器类方法,就应该有多少个页面可以展示。但是,由于为了提高网站代码的逻辑性,我们不可能将所有的页面展示逻辑都写在同一个控制器类中(虽然理论上完全可以这么做)。因此我们会建立若干个控制器类文件,来分别对应网站的不同页面。
- ThinkPHP学习笔记(2)ThinkPHP运行流程
- 笔记--ThinkPHP运行流程
- thinkphp学习笔记2
- ThinkPHP 的运行流程
- ThinkPHP学习之ThinkPHP运行,配置
- ThinkPHP 学习笔记
- thinkphp 学习笔记
- ThinkPHP学习笔记1
- ThinkPHP学习笔记
- ThinkPHP学习笔记
- thinkphp学习笔记一
- ThinkPHP学习笔记
- ThinkPHP学习笔记
- thinkphp 学习笔记
- ThinkPHP学习笔记
- ThinkPHP学习笔记
- ThinkPHP学习笔记
- ThinkPHP学习笔记
- datagrid 小结
- Hadoop、Spark、HBase与Redis的适用性讨论(全文)
- Jquery easyUi 数据表格(DataGrid)的特性
- 美爆了!传说中的粉画?
- codeforces--Spreadsheets(模拟)
- ThinkPHP学习笔记(2)ThinkPHP运行流程
- uvaoj 106 Fermat vs. Pythagoras 毕达哥拉斯三元组
- 结合个人项目浅谈云盘存储
- jquery easyui datebox 时间格式化
- unity之血条和distance
- Jquery easyUi表单验证提交
- proportionally and
- 2014年博客之星-小巫的无耻拉票帖
- JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载