PHP21 MVC
学习目标
- MVC设计模式
- 单一入口机制
- MVC的实现
MVC设计模式

- Model(模型)
是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
- View(视图)
是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
- Controller(控制器)
是应用程序中处理用户交互的部分。通常控制器负责处理用户请求,从模型读取数据,并向视图发送数据。
单一入口机制
多入口
通过访问不同的php文件执行相应功能来完成用户请求。例如:
index.php //网站首页
list.php?page=3 //内容列表页
info.php?id=20 //内容详细页
login.php //用户登录页
单一入口
web 程序所有的请求都指向一个脚本文件,使用一个php文件处理HTTP请求。

如图,以index.php为入口文件。避免用户在MVC模型中直接访问控制器导致程序混乱。
单一入口程序架构逻辑示意图如下所示:

单一入口文件示例代码(MVC和index文件位于同一目录下)
Model
class HomeModel
{
public function getData(){
return "从数据库获取到了数据!";
}
}
View
class HomeView
{
public function display($data){
echo $data;
} }
Controller
class HomeController
{
//显示Home首页函数
public function index(){
//1.实例化模型
$model=new HomeModel();
//2.读取数据库数据
$data=$model->getData();
//3.实例化视图
$view=new HomeView();
//4.显示数据
$view->display($data);
}
}
index.php
//自动加载类文件
function __autoload($className){
include_once $className.".class.php";
}
//单一入口路由选择和事件分发
//控制器命名规范:控制器名称+Controller
//View、Model规则一致
//控制器名称按照类名规范
$controller=isset($_GET['c'])?$_GET['c']:"home";
$action=isset($_GET['a'])?$_GET['a']:"index";
//初始化控制器
$controllerName=ucfirst(strtolower($controller))."Controller";
echo $controllerName;
$c=new $controllerName();
MVC的实现
框架执行流程

定义目录结构

配置文件定义
configs.php文件定义数据库配置信息和默认路由信息。

常量定义
base.php文件用于定义系统常量。

核心运行类定义
把入口文件需要处理的请求分发功能定义到核心运行类中。

自动加载类设计
所文件的加载都是相对于入口文件进行加载。

入口文件设计

基础路由设计
按照命名空间命名规范,定义home模块的IndexController控制器及其方法index()。index()方法简单输出测试数据。
对很核心运行类run()方法进行设计。

PHP21 MVC的更多相关文章
- Asp.Net Mvc 使用WebUploader 多图片上传
来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...
- .Net Core MVC 网站开发(Ninesky) 2.4、添加栏目与异步方法
在2.3中完成依赖注入后,这次主要实现栏目的添加功能.按照前面思路栏目有三种类型,常规栏目即可以添加子栏目也可以选择是否添加内容,内容又可以分文章或其他类型,所以还要添加一个模块功能.这次主要实现栏目 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入
原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...
- 开源:Taurus.MVC 框架
为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate,代码不堪入目,Bug无限,经常点 ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- Taurus.MVC 2.0 开源发布:WebAPI开发教程
背景: 有用户反映,Tausus.MVC 能写WebAPI么? 能! 教程呢? 嗯,木有! 好吧,刚好2.0出来,就带上WEBAPI教程了! 开源地址: https://github.com/cyq1 ...
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...
随机推荐
- virtualBox更改虚拟机内存大小
在cmd中进入到virtualbox安装目录 查看目前的虚拟机列表: VBoxManage list vms 读取虚拟机具体信息 VBoxManage showvminfo <uuid>| ...
- View Controller Programming Guide for iOS---(二)---View Controller Basics
View Controller Basics Apps running on iOS–based devices have a limited amount of screen space for d ...
- Linux2.6 内核中结构体初始化(转载)
转自:http://hnniyan123.blog.chinaunix.net/uid-29917301-id-4989879.html 在Linux2.6版本的内核中,我们经常可以看到下面的结构体的 ...
- USACO Training3.3亚瑟王的宫殿【搜索】By cellur925
题目传送门 因为太蒟了,所以参考了dalao@zbtrs == 对此表示感谢并侵删. 看起来我们就知道这是搜索题. 最后的情况分两种:有骑士背国王/国王自食其力走到集合点. 首先,我们不知道大家 ...
- Windows、Linux、Android常用软件分享
Windows.Linux.Android常用软件分享 前言 本来没准备写这篇博客,一是没时间,还有其他很多优先级更高的事情要做.二是写这种博客对我自己来说没什么的帮助,以前我就想好了不写教程类,使用 ...
- 在IDEA中使用JSP中的out内置对象,out.println()——println红色解决方法
今天在学习JSP的时候,在jsp中使用out内置对象,开发工具用的是IDEA,结果如下图所示 郁闷了半天找度娘,可能关键字输的不准确,乱七八糟的方法一大堆,什么加依赖啊啥的,反正都不管用,最后找到一篇 ...
- Hibernate绑定session保证session为单线程操作
- Hadoop Hive概念学习系列之HDFS、Hive、MySQL、Sqoop之间的数据导入导出(强烈建议去看)
Hive总结(七)Hive四种数据导入方式 (强烈建议去看) Hive几种数据导出方式 https://www.iteblog.com/archives/955 (强烈建议去看) 把MySQL里的数据 ...
- byte的范围-128-127
01111111 表示的是最大的数字 是127这个没有问题 ,前面的0 表示的正数,1表示的负数 而负数在计算机中的存储都是通过补码的形式存在的,也就是说 1 1111 111 是计算机中最小的数 ...
- python之迷宫DFS
# @File: maze_stack_dfs maze = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], [1, ...