MVC 模型、视图、控制及其单入口文件的mvc的工作原理
什么是mvc,mvc就是模型视图控制,模型就是model,在项目中负责数据库相关的操作,视图就是view ,负责页面的展示和数据的展示,控制就是controller ,负责中间的逻辑转换,数据的接收,输出的处理。mvc的好处是让项目开发能够让代码和页面尽可能的分解开,相互之间的关联尽可能的少。这只是一种开发方式,据说是从java过来的,真是坑人的java啊。
常见的php框架基本上都属于mvc的开发模式,例如:Yii(大赞),Ci,Tp(国产),这几个是我用到过的,还有很多php的框架太多了,就不一一例举了,开发模式大同小异,这里我为什么大赞Yii 这个框架呢,因为这个框架设计的太强大了,不愧是全栈框架,像ci和tp 就是一般的框架了,功能不多。没啥亮点,呵呵。
开发流程是什么,一般在项目目录下面有一个叫做controller的文件夹,里面写控制器,在和他(一般)平级的目录view中放入视图也就是页面,还有一个model的目录,放着和数据库表相关的数据表命名的model文件 ,主要是在controller 里面写功能,然后使用model文件里面提供的方法对数据库进行增删改查。视图,一般是在控制器里面直接调用,Yii就是$this->render(),CI就是$this->load->view(),TP就是$this->display();这几个方法基本上就是直接输出数据 然后echo出来。或者是加上第三个参数通过ob_start() ob_get_contents()这样的方法获取buffer 内容return 出来,再根据具体需求做处理
什么是单入口(index.php)
单入口一般就是只把一个文件index.php暴露出来,能够通过这个文件访问相关的内容,这种模式的工作原理是什么呢?其实就是通过index.php,将系统的核心文件载入进来,然后再通过核心文件里面的路由类对,请求的内容进行解析,解析出来要访问的Controller类和其中的方法。看不懂没关系直接上图;
当我们访问deme/index.php/welcome/index
以Ci为例:
首先将这样的一个目录暴露出来
,能够访问到index.php,这个时候index,php文件开始执行,打开这个文件我们跟着代码走
首先定义了一下环境常量,
然后定义一些
项目目录常量为后面加载文件做准备,然后略过部分走到index.php的最下面
这里就开始真正的工作了开始引入系统核心文件。
我们打开这个文件看看到底写了点什么东西,打开里面依然是引入各种常量,配置文件,继续走我们看到有一行这个
这是什么?我们打印出来看看
这就是那个系统核心的路由类。
继续往下看
我们看到有一个叫做$RTR->class 类的属性,打印出来,我们看到了什么,
看到
两个字符串,一个是welcome,一个是index,welcome就是默认要访问的控制器,index就是我们要访问的方法名称。好了,这个时候就真正开始启动了,这个时候先判断文件是否存在,如果存在就引入,不存在就404,然后 $c = new Controller();如图:
先把要访问的类加载,然后实例化一个,
然后再调用call_user_func_array这个函数,执行实例化对象的方法,就相当于 $welcome = new Welcome();
然后再执行 $welcome->index();
好了整个过程大概就是这个样子,如果不懂可以多看几眼,体会一下,就能理解了,有机会我也写一个简单的mvc,单入口文件的框架,这样能够让大家更清楚的理解这个东西。
MVC 模型、视图、控制及其单入口文件的mvc的工作原理的更多相关文章
- opencart 单入口文件简单分析
opencart 单入口文件简单分析 opencart是基于mvcl的商城系统,据说是一个外国有人单独开发.比较牛叉.但是又不大符合国人习惯,目前国内opencart社区也是不少. 简单分析了下单 ...
- thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用。第二种架构模式两个单入口文件,分别生成两个应用定义define。。。函数可以定义配置文件。。。。
thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用. ...
- webpack4 单入口文件配置 多入口文件配置 以及常用的配置
单入口文件配置 webpack.config.js const path = require('path'); const HtmlWebpackPlugin = require('html-webp ...
- 设计模式-结构型模式, mvc 模型视图控制器模式(8)
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO.它 ...
- thinkPHP为什么设置一个单入口文件?
TP3.2的具体解释: ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个应用都有一个统一(但不一定是唯一)的入口. 应该说,所有应用都是从入口文件开始的,并且不同应用的入口文 ...
- QT MVC 模型/视图
1. 模型视图实例一, QFileSystemModel QTreeView ,model/view示例. #include <QApplication> #include <QF ...
- MVC(模型-视图-控制器)的理解
在 MVC 中,模型对象表示数据(例如日历应用程序中的待办事项或绘图程序中的图形),视图对象知道如何显示模型对象所表示的数据,控制器对象充当模型和视图的媒介.在“HelloWorld”应用程序中,模型 ...
- MVC 模型 视图, 控制器 写 三级联动
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- Qt MVC(模型-视图-代理)
实习刚才是一段时间,公司这边就要求熟悉这个mvc.一般开始都是用tableview,前面的blog我都是使用listview居多,并且相对delegate这个使用的多余model.接下来说下model ...
随机推荐
- C# ITextSharp pdf 自动打印
PDF生成后直接进入打印预览不用下载 using iTextSharp.text; using iTextSharp.text.pdf; Document pdfDoc = new Document( ...
- [Mugeda HTML5技术教程之12]制作跨屏互动应用
mugeda动画平台还可以用来制作跨屏互动的动画应用,比如在PC端的大屏幕上显示动画的主界面,同时会显示出供手机扫描的二维码,手机扫描后会在手机上显示手机端动画界面.通过手机就可以和PC端的显示界面跨 ...
- 使用Japserreport填充报表数据(3)
E中以PDF文件的格式显示静态的中文字符串,在大多数的情况下,打印的数据来自于一些变量,在JasperReports工具中传递数据并填充到 报表只有两种方式,即使用Parameters参数和JRDat ...
- 逃离迷宫(HDU 1728 BFS)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- debian系统下安装ssh服务
它是什么?? SSH 为 Secure Shell 的缩写,简单地说,SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可 ...
- iOS 断网处理
iOS 断网处理 (2014-01-13 18:13:21) 转载▼ 标签: it - (BOOL)application:(UIApplication *)application didFini ...
- php生成json和js解析json
php生成json $value=array("name"=>"dfas");echo json_encode($value); js解析json var ...
- BZOJ 3550 Vacation
http://www.lydsy.com/JudgeOnline/problem.php?id=3550 题意:有3N个数,你需要选出一些数,首先保证任意长度为N的区间中选出的数的个数<=K个, ...
- Android得到控件在屏幕中的坐标
getLocationOnScreen ,计算该视图在全局坐标系中的x,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度)//获取在当前屏幕内的绝对坐标 getLocationInWi ...
- 移植strace调试工具到arm平台
strace工具是一个非常强大的工具,是调试程序的好工具.要移植到arm平台,就需要使用交叉编译工具编译生成静态链接的可执行文件.具体步骤如下:1.下载 strace-4.5.16 移植str ...

,能够访问到index.php,这个时候index,php文件开始执行,打开这个文件我们跟着代码走
首先定义了一下环境常量,
项目目录常量为后面加载文件做准备,然后略过部分走到index.php的最下面
这里就开始真正的工作了开始引入系统核心文件。
这就是那个系统核心的路由类。
我们看到有一个叫做$RTR->class 类的属性,打印出来,我们看到了什么,
两个字符串,一个是welcome,一个是index,welcome就是默认要访问的控制器,index就是我们要访问的方法名称。好了,这个时候就真正开始启动了,这个时候先判断文件是否存在,如果存在就引入,不存在就404,然后 $c = new Controller();如图:
先把要访问的类加载,然后实例化一个,
然后再调用call_user_func_array这个函数,执行实例化对象的方法,就相当于 $welcome = new Welcome();