学习目标

  • 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的更多相关文章

  1. Asp.Net Mvc 使用WebUploader 多图片上传

    来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...

  2. .Net Core MVC 网站开发(Ninesky) 2.4、添加栏目与异步方法

    在2.3中完成依赖注入后,这次主要实现栏目的添加功能.按照前面思路栏目有三种类型,常规栏目即可以添加子栏目也可以选择是否添加内容,内容又可以分文章或其他类型,所以还要添加一个模块功能.这次主要实现栏目 ...

  3. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  4. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  5. ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入

    原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...

  6. 开源:Taurus.MVC 框架

    为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate,代码不堪入目,Bug无限,经常点 ...

  7. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  8. Taurus.MVC 2.0 开源发布:WebAPI开发教程

    背景: 有用户反映,Tausus.MVC 能写WebAPI么? 能! 教程呢? 嗯,木有! 好吧,刚好2.0出来,就带上WEBAPI教程了! 开源地址: https://github.com/cyq1 ...

  9. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

随机推荐

  1. C - Soldier and Cards

    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Description Two bo ...

  2. 036--MySQL扩展

    一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( S ...

  3. hdoj3714【三分】

    手动插姿势: 三分法可以应用于凸函数或者凹函数的求极值. 三分讲解:http://blog.csdn.net/pi9nc/article/details/9666627 三分模板:http://www ...

  4. python list生成表达式

    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式.运用列表生成式,可以写出非常简洁的代码. >>> list(ra ...

  5. poj 3648 Wedding【2-SAT+tarjan+拓扑】

    看错题*n,注意是输出新娘这边的-- 按2-SAT规则连互斥的边,然后注意连一条(1,1+n)表示新娘必选 然后输出color[belong[i]]==color[belong[1+n(新娘)]]的点 ...

  6. TensorFlow图像处理函数

    参考书 <TensorFlow:实战Google深度学习框架>(第2版) 图像编码处理+图像大小调整+图像翻转+图像色彩调整+处理标注框 #!/usr/bin/env python # - ...

  7. 【Codeforces1139D_CF1139D】Steps to One (Mobius_DP)

    Problem: Codeforces 1139D Analysis: After ACing E, I gave up D and spent the left 30 minutes chattin ...

  8. Secrets CodeForces - 333A

    Secrets CodeForces - 333A 题意:这个世界上只有这样面值的硬币:1,3,9,27,81,...有一个商人,某一天遇到了一个顾客,他购买了价值n的商品,发现用自己的硬币无法付给商 ...

  9. Mysql的外键

    概念:如果一个实体A的某一字段,刚好指向或引用另一个实体B的主键,那么实体A的这个字段就叫作外键,所以简单来说,外键就是外面的主键,就是其他表的主键. 例: 以上的学生表的班级字段,就是一个外键! 其 ...

  10. PHP获取今天开始和结束的时间戳、每周开始结束的时间戳、每月开始结束的时间戳

    PHP获取今天内的时间 今天开始和结束的时间戳 $t = time(); $start = mktime(0,0,0,date("m",$t),date("d" ...