首先 我要感谢慕课网的老师提供视频资料

http://www.imooc.com/learn/69

下面我来进行笔记

我们制作一个简单的mvc架构

制作第一个控制器 testController.class.php

<?php
/**
*
*/
class testController
{
	function show(){
		// 控制器的作用是调用模型,冰调用视图,将模型产生的数据传递到视图
		// 让相关视图去显示
		echo "hello world";
	}
}

 制作第一个模型 testModel.class.php

<?php
 /**
 *
 */
 class testModel
 {
 	// 模型的作用是获取数据并处理返回数据
 	function get(){
 		return "hello world";
 	}
 }

 制作第一个视图  testView.class.php

<?php
/**
*
*/
class testView
{
	function display($data){
		// 视图的作用是将取得的数据进行组织,美化等,并最终向用户输出
		echo $data;
	}
}

 制作第一个入口文件 test.php

<?php
/*********************
第一步 浏览器   》 调用控制器,对他发出指令
第二步 控制器   》 按指令选取一个合适的模型
第三步 模型     》 按控制器指令选取相应的数据
第四步 控制器   》 按指令选取相对应的视图
第五步 视图     》 把第三步渠道的数据按用户想要的样子显示出来
*****************************/
require_once ('testController.class.php');
require_once ('testView.class.php');
require_once ('testModel.class.php');

$testController=new testController();
$testController->show();
?>

 这个时候我们要对控制器的文件进行改造

?php
/**
*
*/
class testController
{
	function show(){
		// 控制器的作用是调用模型,冰调用视图,将模型产生的数据传递到视图
		// 让相关视图去显示
		$testModel=new testModel();
		$data=$testModel->get();
		$testView=new testView();
		$testView->display($data);
	}
}

   如果没错的话 那么就会得到hello world这句话

 那么一个很简单的mvc架构已经形成了 我们现在要对其进行添加功能使其能够应对需求

架构的目录如下

index.php 入口文件

config.php配置文件

function.php 全局文件

libs 类库

-------Controller  控制器

--------Model      模型

--------View       视图

--------ORG      第三方类库

<?php
// ********************
// 第一步 浏览器   》 调用控制器,对他发出指令
// 第二步 控制器   》 按指令选取一个合适的模型
// 第三步 模型     》 按控制器指令选取相应的数据
// 第四步 控制器   》 按指令选取相对应的视图
// 第五步 视图     》 把第三步渠道的数据按用户想要的样子显示出来
// ****************************
// require_once ('testController.class.php');
// require_once ('testView.class.php');
// require_once ('testModel.class.php');

// $testController=new testController();
// $testController->show();
//

// url形式 index.php?controller=控制器&method=方法名
require_once('function.php');require_once('config.php');
$controllerAllow= array('test','index','show');
$methodAllow = array('test','index' );
$controller=in_array($_GET['controller'],$controllerAllow)?daddslashes($_GET['controller']):'index';
$method=in_array($_GET['method'],$methodAllow)?daddslashes($_GET['method']):'index';
C($controller,$method);

 ?>

  首先我们对之前的入口文件注释掉  我们此时应该引入一个全局的文件和一个配置文件

然后我们通过控制器的传入的控制器名和控制器的方法进行路由重置使其得到相关的结果输出

可以得到基本的代码片段

$controller=$_GET['controller']);

此时我们要考虑一下的因素

  1.没有传入控制器的名称是 怎么办?

  2。传入的控制器名称不合法的时候,怎么办?

3.转入的控制器的名称为私密的时候,不可以外部调用的时候,怎么办?

结合以上三个因素  可以把代码改为

$controllerAllow= array('test','index','show');
$methodAllow = array('test','index' );
$controller=in_array($_GET['controller'],$controllerAllow)?daddslashes($_GET['controller']):'index';
$method=in_array($_GET['method'],$methodAllow)?daddslashes($_GET['method']):'index';

  由于重复的利用了进行路由的跳转  这个时候我们应该定义一个C函数来进行  全局化调用

下面我们贴下了function.php中的函数C的片段

function C($name,$method){
	require_once ('/libs/Controller/'.$name.'Controller.class.php');
	 eval('$obj = new '.$name.'Controller();$obj->'.$method.'();');
}

  访问对应的控制器的方法,eval可以进行对应的字符进行位置上的拼接

其他的函数如下

function M($name){
	require_once ('/libs/Model/'.$name.'Model.class.php');
	eval('$obj=new '.$name.'Model();');
	return $obj;
}

function V($name){
	require_once ('/libs/View/'.$name.'View.class.php');
	eval('$obj=new '.$name.'View();');
	return $obj;
}
function daddslashes($str){
	return (!get_magic_quotes_gpc()?addslashes($str):$str);
}

  

MVC架构模式分析与设计(一)---简单的mvc架构的更多相关文章

  1. PHP实例学习之————MVC架构模式分析与设计

      写博客,不容易,你们的评论和转载,就是我的动力, 但请注明出处,隔壁老王的开发园:http://www.cnblogs.com/titibili 2016年1月31日 18:53 作者:Ygirl ...

  2. php简单实现MVC

    在PHP中使用MVC越来越流行了,特别是在一些开源的框架当中.MVC足以应对大多数的情况,但还有一些情况是其不太适合的,如比较简单的个人博客,对于只有几百篇文章量级的博客,使用MVC让人觉得有些太复杂 ...

  3. 设计 REST 风格的 MVC 框架

    http://www.ibm.com/developerworks/cn/java/j-lo-restmvc/ 传统的 JavaEE MVC 框架如 Struts 等都是基于 Action 设计的后缀 ...

  4. [.NET] 一步步打造一个简单的 MVC 网站 - BooksStore(一)

    一步步打造一个简单的 MVC 网站 - BooksStore(一) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore 简介 主 ...

  5. 使用微服务架构思想,设计部署OAuth2.0授权认证框架

    1,授权认证与微服务架构 1.1,由不同团队合作引发的授权认证问题 去年的时候,公司开发一款新产品,但人手不够,将B/S系统的Web开发外包,外包团队使用Vue.js框架,调用我们的WebAPI,但是 ...

  6. [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(一)

    一步步打造一个简单的 MVC 电商网站 - BooksStore(一) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore &l ...

  7. 002-MVC架构,贫血的领域模型、spring mvc,webhars使用

    一.MVC.贫血的领域模型 MVC理念是将视图与模型进行解耦. 贫血的领域模型 <领域驱动设计>定义了一组架构规则,能够指导我们更好地将业务领域集成到代码中. 其中一个核心理念是将面向对象 ...

  8. MVC 之 架构的基本原理及Asp.Net实现MVC

    一.引言 许多Web应用都是从数据存储中检索数据并将其显示给用户.在用户更改数据之后,系统再将更新内容存储到数据存储中.因为关键的信息流发生在数据存储和用户界面之间,所以很多应用将数据和用户界面这两部 ...

  9. Java生鲜电商平台-App系统架构开发与设计

    Java生鲜电商平台-App系统架构开发与设计 说明:阅读此文,你可以学习到以下的技术分享 1.Java生鲜电商平台-App架构设计经验谈:接口的设计2.Java生鲜电商平台-App架构设计经验谈:技 ...

随机推荐

  1. Atitit。数据库 安全性 重要敏感数据加密存储解决方案

    Atitit.数据库 安全性 重要敏感数据加密存储解决方案 1.1. 加密存储的重要性1 1.2. 使用的加密算法aes1 1.3. 数据加密以后会有一些问题.1 1.3.1. 一个是统计,比如统计资 ...

  2. Android Touch事件传递机制 二:单纯的(伪生命周期)

    转载于:http://blog.csdn.net/yuanzeyao/article/details/38025165 在前一篇文章中,我主要讲解了Android源码中的Touch事件的传递过程,现在 ...

  3. Android 面试题及答案(2)

    1.Activity相关.launchmode,OnSaveInstnceState,生命周期等. 4种默认的launchmode,以及OnNewIntent的回调. OnNewIntent-> ...

  4. 聊下 git rebase -i

    在使用git作为源代码管理工具的时候,开发的时经常会面临一个常见的问题,多个commit 需要合并为一个完整的commit提交. 在一个基本的迭代周期里,你会有很多次commit,有跟配置文件相关的, ...

  5. 还来一篇说下json_value 以及 json_query 的应用 (3)

    上一篇说了一下openjson 的一些使用方法,这次再说一下在2016里面的查询取值,当然就是 json_query 和 json_value 这2兄弟了 首先 ) = '{"a" ...

  6. linux top 源码分析

    /* * Copyright (c) 2008, The Android Open Source Project * All rights reserved. * * Redistribution a ...

  7. [已解决]从微软合作伙伴资源和MSDN下载系统和软件Microsoft download Manager无效

    有个itellyou,更新了所有MSDN的软件包.如果自己有微软的注册账户,还是从微软官网下载比较好.而且对自己账户里的系统和itellyou里的做了对比.发现SHA1码不相同,估计官方分配的序列号也 ...

  8. Centos7中systemctl命令详解

    Linux Systemctl是一个系统管理守护进程.工具和库的集合,用于取代System V.service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器.通过Syst ...

  9. linux shell 变量

  10. Neutron 理解 (4): Neutron OVS OpenFlow 流表 和 L2 Population [Netruon OVS OpenFlow tables + L2 Population]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...