PHP下的MVC
2016-03-02 09:39
621 查看
学习资源来自于慕课网~~
先来一个简单的Demo
SimpleDemo
控制器C testController.class.php
模型M testModel.class.php
视图V testView.class.php
使用控制器对模型进行调用,获取数据,通过视图进行展示:
test.php
对上述的SimpleDemo进行改进:
目录结构:
控制器存储在 mvc/libs/Controller 下;模型存储在 mvc/libs/Model 下;视图存储在 mvc/libs/View 下;配置文件 config.php 存储在 mvc 下;index.php、function.php 存储在mvc下。
其中 function.php :
mvc/libs/Controller/testController.class.php
mvc/libs/Model/testModel.class.php
mvc/libs/View/testView.class.php
index.php (单一入口程序)
使用Smarty视图引擎,对上述进行改进:
目录结构如下:
![](http://img.blog.csdn.net/20160302092854127?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20160302093017488?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
进行function.php进行修改,添加引入第三方类库的方法 ORG:
config.php 保存Smarty属性初始化数据
index.php 对Smarty初始化,调用控制器
testController.class.php 调用模型testModel.class.php获取数据,并使用Smarty注册变量,使用test.tpl模板进行视图的显示.
test.tpl 视图
显示模型获取而来的数据,实现业务逻辑层与界面层的分离。
先来一个简单的Demo
SimpleDemo
控制器C testController.class.php
<?php class testController { function show() { //控制器的作用是调用模型,并调用视图,将模型产生的数据传递给视图,并让相关视图去显示 $testModel = new testModel(); $data = $testModel->get(); $testView = new testView(); $testView->display($data); } } ?>
模型M testModel.class.php
<?php // Model 模型:它是从数据库或接口等地方获取数据源,并且进行数据处理的物件 class testModel { function get() { //模型的作用是获取数据并处理返回数据 return "Hello World"; } } ?>
视图V testView.class.php
<?php class testView { function display($data) { echo $data; } } ?>
使用控制器对模型进行调用,获取数据,通过视图进行展示:
test.php
<?php /*** 第一步 浏览者 -> 调用控制器,对他发出指令 第二步 控制器 -> 按指令选取一个合适的模型 第三步 模型 -> 按控制器指令取相应数据 第四步 控制器 -> 按指令选取相应视图 第五步 视图 -> 把第三步取到的数据按用户想要的样子显示出来 ***/ require_once('testController.class.php'); require_once('testModel.class.php'); require_once('testView.class.php'); $testController = new testController(); $testController->show(); ?>
对上述的SimpleDemo进行改进:
目录结构:
控制器存储在 mvc/libs/Controller 下;模型存储在 mvc/libs/Model 下;视图存储在 mvc/libs/View 下;配置文件 config.php 存储在 mvc 下;index.php、function.php 存储在mvc下。
其中 function.php :
<?php function C($name, $method) { //原则上控制器的方法是不能有自己的参数的,否则不符合MVC的架构规范的 require_once('/libs/Controller/'.$name.'Controller.class.php'); //$testController = new testController(); //$testController->show(); //eval 把字符串转化为可执行的程序 //eval('$obj = new '.$name.'Controller(); $obj->'.$method.'();'); //eval() 函数调用简单但是不安全 // 可用下面代码代替: $controller = $name.'Controller'; $obj = new $controller(); $obj->$method(); } //C('test','show'); function M($name) { //模型的方法一般带有参数,所以我们不把方法封装起来 require_once('/libs/Model/'.$name.'Model.class.php'); //eval('$obj = new '.$name.'Model();'); $model = $name.'Model'; $obj = new $model(); return $obj; } function V($name) { require_once('/libs/View/'.$name.'View.class.php'); //eval('$obj = new '.$name.'View();'); $view = $name.'View'; $obj = new $view(); return $obj; } //防止非法字符的输入 function daddslashes($str) { return (!get_magic_quotes_gpc())?addslashes($str):$str; } ?>
mvc/libs/Controller/testController.class.php
<?php class testController { function show() { //控制器的作用是调用模型,并调用视图,将模型产生的数据传递给视图,并让相关视图去显示 $testModel = M('test'); $data = $testModel->get(); $testView = V('test'); $testView->display($data); } } ?>
mvc/libs/Model/testModel.class.php
<?php // Model 模型:它是从数据库或接口等地方获取数据源,并且进行数据处理的物件 class testModel { function get() { //模型的作用是获取数据并处理返回数据 return "Hello World"; } } ?>
mvc/libs/View/testView.class.php
<?php class testView { function display($data) { echo $data; } } ?>
index.php (单一入口程序)
<?php //url形式 index.php?controller=控制器名称&method=方法名 require_once('function.php'); //为了防止非法用户访问 控制器名和方法名,我们定义允许访问的控制器和方法 $controllerAllow = array('test','index'); $methodAllow = array('test','index', 'show'); $controller = in_array($_GET['controller'], $controllerAllow) ? daddslashes($_GET['controller']) : 'index'; $method = in_array($_GET['method'], $methodAllow) ? daddslashes($_GET['method']) : 'index'; C($controller, $method); ?>
使用Smarty视图引擎,对上述进行改进:
目录结构如下:
进行function.php进行修改,添加引入第三方类库的方法 ORG:
<?php function C($name, $method) { //原则上控制器的方法是不能有自己的参数的,否则不符合MVC的架构规范的 require_once('/libs/Controller/'.$name.'Controller.class.php'); //$testController = new testController(); //$testController->show(); //eval 把字符串转化为可执行的程序 //eval('$obj = new '.$name.'Controller(); $obj->'.$method.'();'); //eval() 函数调用简单但是不安全 // 可用下面代码代替: $controller = $name.'Controller'; $obj = new $controller(); $obj->$method(); } //C('test','show'); function M($name) { //模型的方法一般带有参数,所以我们不把方法封装起来 require_once('/libs/Model/'.$name.'Model.class.php'); //eval('$obj = new '.$name.'Model();'); $model = $name.'Model'; $obj = new $model(); return $obj; } function V($name) { require_once('/libs/View/'.$name.'View.class.php'); //eval('$obj = new '.$name.'View();'); $view = $name.'View'; $obj = new $view(); return $obj; } //防止非法字符的输入 function daddslashes($str) { return (!get_magic_quotes_gpc())?addslashes($str):$str; } function ORG($path, $name, $params=array()) { //path 是路径,name是第三方类名,params是该类初始化的时候需要指定、赋值的属性,格式为array(属性名=>属性值,属性名2=>属性值2……) require_once('libs/ORG/'.$path.$name.'.class.php'); //eval('$obj = new '.$name.'();'); $obj = new $name(); if(!empty($params)) { foreach($params as $key=>$value) { //eval('$obj->'.$key.'=\''.$value.'\';'); $obj->$key = $value; } } return $obj; } ?>
config.php 保存Smarty属性初始化数据
<?php $viewconfig = array('left_delimiter'=>'{','right_delimiter'=>'}','template_dir'=>'tpl','compile_dir'=>'template_c'); ?>
index.php 对Smarty初始化,调用控制器
<?php //url形式 index.php?controller=控制器名称&method=方法名 require_once('function.php'); require_once('config.php'); //为了防止非法用户访问 控制器名和方法名,我们定义允许访问的控制器和方法 /*$controllerAllow = array('test','index'); $methodAllow = array('test','index', 'show'); $controller = in_array($_GET['controller'], $controllerAllow) ? daddslashes($_GET['controller']) : 'index'; $method = in_array($_GET['method'], $methodAllow) ? daddslashes($_GET['method']) : 'index'; C($controller, $method);*/ //使用Smarty $view = ORG('Smarty/','Smarty', $viewconfig); $controller = $_GET['controller']; $method = $_GET['method']; C($controller, $method); ?>
testController.class.php 调用模型testModel.class.php获取数据,并使用Smarty注册变量,使用test.tpl模板进行视图的显示.
<?php class testController { function show() { //控制器的作用是调用模型,并调用视图,将模型产生的数据传递给视图,并让相关视图去显示 /*$testModel = M('test'); $data = $testModel->get(); $testView = V('test'); $testView->display($data);*/ //使用Smarty global $view; $testModel = M('test'); $data = $testModel->get(); $view->assign('str',$data); $view->display('test.tpl'); } } ?>
test.tpl 视图
{$str}
显示模型获取而来的数据,实现业务逻辑层与界面层的分离。
相关文章推荐
- PHP第五课 自己主动类型转换与流程控制
- thinkphp中的session()方法
- PHP函数
- php缓存技术基础知识
- PHP 5.0~5.6 各版本兼容性的 cURL 文件上传
- 143 php 接口
- PHP团队编码质量提升之道
- php中for循环中变量没有清空导致的bug
- 深入浅析用PHP实现MVC
- PHP MVC框架路由学习笔记
- Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
- freeSHHd+puttygen搭建Sftp
- PHP环境问题
- phpqrcode
- 如何用php下载文件?
- thinkphp使用问题
- thinkphp路径引用问题
- 升级wamp5集成安装包 php5.2到php5.3
- 利用Swoole实现PHP+websocket 聊天室
- 在官网下载了最新版的PHP,解压后的安装包里为什么没有php5isapi.dll这个dll文件?