首页 > 代码库 > MVC第一课

MVC第一课

MVC设计模式

MVC概念

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

 

 

MVC三大组件

模型

Model:模型

应用程序中用于处理应用程序数据逻辑的部分。

 

凡是跟数据操作有关的内容都属于数据逻辑:只要与SQL指令有关,那么都属于模型(数据逻辑)

 

MVC中:所有的SQL指令都应该存在于模型组件中。

视图

View:视图

应用程序中处理数据显示的部分。

 

视图:template(模板),用来承载数据的容器,通常是HTML文件(显示[HTML],美化[CSS]和效果[JavaScript]

控制器

Controller:控制器

应用程序中处理用户交互的部分。

 

控制器:也叫作模块(Module),是用来与用户直接接触的脚本代码(浏览器直接提交给PHP的脚本对象),判断用户操作的逻辑性。

 

控制器:在需要的时候,可以调用模型来进行数据处理(数据库操作)

控制器:在需要的时候,可以调用视图来进行数据显示(加工美化)

 

 

MVC模式意义

MVC的本质是将代码进行分离:显示数据部分(View),处理业务部分(Controller)和数据操作部分(Model)

 

1、 符合人类分工协作的模式(思维模式)

2、 利于代码的维护:前端(HTML)与后端(PHP)的分离

 

代码发展史

1、 PHP与HTML嵌入到一起:混合开发阶段

优点:效率高

缺点:代码重用性低(不利于维护)

2、 PHP与HTML分离开来(两个脚本):模板技术

优点:前后端开发人员分离,利于代码的维护

缺点:效率相对于混编较低,PHP后端代码复用性比较低

3、 PHP中业务部分与数据操作部分再次分离:MVC思想

优点:代码分离完整,利用代码重复利用

缺点:服务器要操作多个文件完成一个请求(效率最低)

 

 

效率低:指的是相对于混编模式,从计算机的高效运作来说,再对比网络延迟,效率的降低对于用户而言是感受不到。

MVC工作原理

PHP脚本工作原理

浏览器—》发起请求—》服务器PHP接收请求—PHP处理(业务逻辑判断,数据库操作,显示数据)--》返回给浏览器

 

 

MVC工作原理

MVC设计思想中:至少有三个文件才能服务一次请求(控制器,模型,视图)

1、用户通过浏览器发起请求

2、PHP接收请求:对应的脚本必须是控制器脚本

2.1 控制器判断用户是否操作恰当

2.2 控制器调用模型获取数据

2.3 控制器调用视图显示数据(输出)

3、PHP返回请求响应结果:控制器

 

 

MVC模式的工作流程

MVC思想设计的项目,按照完整的请求走一遍

 

1、 用户浏览器输入URL:PHP脚本(控制器)

2、 服务器控制器脚本接收请求

2.1 业务逻辑判断

2.2 调用对应的模型:一个模型负责一张表对应的所有SQL操作

2.2.1 模型需要公共代码

面向过程:封装公共函数

面向对象:用类来封装公共代码(连接认证):模型继承公共模型

2.2.2 模型封装每一种数据逻辑:一个逻辑一个方法

2.3 控制器拿到数据(校验)

2.4 控制器加载模板(视图)来显示数据:显示的过程就是输出

3、 返回结果给用户

项目单一入口实现

 

项目单一入口:一个项目只有一个入口(用户唯一可以通过浏览器进行访问的文件)

 

1、 一个项目只要定义一个入口文件index.php/admin.php/home.php

所有的用户都只能允许访问index.php

2、 “入口文件”来决定去访问对应的哪个控制器

进行很多的判断(系统初始化):单独成立一个文件

入口文件:加载并运行初始化文件

3、 初始化文件中来决定访问哪个对应的控制器

3.1 字符集设定

3.2 常量设定(目录)

3.3 系统设定

3.4 自动加载设定

3.5 初始化URL(从“URL”中获取数据):控制器和控制器类中的具体方法

3.6 加载配置文件

3.7 分发控制器

4、 控制器处理MVC工作流程

4.1 业务逻辑判断

4.2 调用模型操作数据库

4.3 调用视图显示数据

5、 结果最终是一层层返回

Index.php->初始化文件->控制器->模型和视图

模型和视图->控制器->初始化文件->index.php->返回浏览器

 

 

创建目录结构

规划框架目录

网站根目录下:应该有哪些对应的文件夹和文件

1、 入口文件:index.php

2、 应用程序目录:App文件夹,存放与当前应用有关的内容(MVC对应的文件)

3、 核心目录:Core文件夹,存放一些核心文件的(初始化,公共核心文件)

4、 Web资源目录:Public文件夹,存放的就是当前应用所需要的一些资源(样式、JS和图片等)

5、 插件目录:Vendor文件夹,存放的是一些外部提供好的完整功能的脚本(Smarty,验证码,图片上传等)

6、 配置目录:Config文件夹,存放配置文件(有可能内部再分层)

7、 文件上传目录:Upload文件夹,存放用户上传的文件

 

 

规划应用程序目录

应用程序目录:MVC对应的文件的存储

 

通常:一个网站分为前台和后台

 

1、 建立两个对应的文件夹,分离前后台业务:Home/Back,Home/Admin

2、 对应的前后台之下,都会有对应的MVC,在对应的文件夹下,再次创建分层文件夹Controller/Model/View

注意:很多时候,前后台业务不一样,但是数据操作基本差不多,基于这种情况,会将Model文件夹提升,在App目录下,与对应的前后台文件夹同级

 

规划Web资源目录

Web资源目录:管理对应的样式,图片和js效果,在Public目录下,创建三个对应的文件夹即可。

 

入口文件

 

入口文件:index.php,本质要做的事情非常简单

 

1、 实现入口设定:安全限定(只有访问index.php入口文件才有可能访问其他文件夹中的资源)

原理:在入口处定义一个常量,然后在其他文件中判断常量是否存在:存在即可访问,不存在不允许访问。

 

 

2、 引入系统初始化文件

 

3、 让系统初始化文件执行

 

搭建运行环境

 

1、 搭建一个虚拟主机

 

2、 重启apache

 

3、 修改本机Hosts文件

 

应用程序初始化类文件

 

要求

1、 文件需要使用命名空间(所有类文件)

2、 文件需要权限判定(所有类文件)

3、 一个功能应该是一个单独的方法

 

 

1、 run方法:运行方法

2、 初始化字符集:initCharset

 

3、 初始化目录常量:initDirConst

 

4、 初始化系统设置:initSystem

控制对应的错误显示级别,以及是否显示

Ini_set(选项,值)

 

5、 初始化配置文件:initConfig

 

6、 初始化URL:initURL

 

7、 初始化自动加载:initAutoload

7.1 加载方式自定义:Core/Controller/Model/Vendor

 

7.2 利用spl_autoload_resiter来进行自动加载

 

7.3 所有的类都是由命名空间控制的:系统寻找类的时候会带着空间寻找(不是一个纯粹的类名):在加载的时候,一定要去除空间

 

 

8、 分发控制器

 

控制器组件

功能:业务逻辑处理,调用模型获取数据,调用视图显示数据

 

控制器调用模型

 

 

控制器调用视图显示数据

 

模型组件

模型:连接数据库,进行SQL操作,数据解析

 

创建模型:一张表(数据)对应一个模型

 

 

模型要做的事情:连接认证(?),组织SQL指令,执行SQL指令,解析SQL执行结果

 

 

视图组件

视图:本质就是显示数据(已有数据)

 

增加视图文件

 

 

在视图中解析数据

 

MVC第一课