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上,浏览下发现一堆错 ...
随机推荐
- python学习笔记7-异常处理
1 写弄成了读 1 try: fh = open("testfile", "r") fh.write("This is my test file fo ...
- E20170509-hm
slice vt. 切成片; 切下; 划分; n. 薄片,切片 slicing n. 切割; 限幅,限制; inspect v. 视察; 检查 inspector n. 检查员; (英 ...
- 机器学习--DIY笔记与感悟--②决策树(1)
在完成了K临近之后,今天我们开始下一个算法--->决策树算法. 一.决策树基础知识 如果突然问你"有一个陌生人叫X,Ta今天需要带伞吗?", 你一定会觉得这个问题就像告诉你& ...
- POJ1700 【经典过河问题,贪心】
题意: n个人过河, 船每次只能坐两个人, 然后船载每个人过河的所需时间不同, 问最快的过河时间. 思路: 仅仅启发一下思维: 我相信很多人一下子的想法就会有,每次最快和那些慢的过去,然后让最快一直来 ...
- Unity陀螺仪
using UnityEngine; using System.Collections; using UnityEngine.UI; //摄像机 陀螺仪转动 public class TGyro : ...
- oauth2(spring security)报错method_not_allowed(Request method 'GET' not supported)解决方法
报错信息 <MethodNotAllowed> <error>method_not_allowed</error> <error_description> ...
- c++模板专门化
#include <iostream> #include<cstring> using namespace std; template <typename T> T ...
- AtCoder Grand Contest 003 F - Fraction of Fractal
题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_f 题目大意: 给定一个\(H×W\)的黑白网格,保证黑格四连通且至少有一个黑格 定义分形如下 ...
- Eclipse Neon Java版本安装Java EE插件
Help→Install New Software 地址:Neon - http://download.eclipse.org/releases/neon/201703231000 选择 Web,X ...
- 使用statement接口实现增,删,改操作