MVC模式的view层的主要任务是进行页面的和结果的显示工作,在php的实现过程中,主要是体现为一个模板(使用模板,可以达到php代码和html代码分离的目的,这样代码和页面的维护就方便多了,便于管理和页面的更换,可以真正的划分程序员、美工的分工)的解析过程:
首先,controler层从model层得到数据
其次,controler层将数据交给view层
再次,view层的接口将数据按一定的方式传给模板解析类,
最后,模板解析类将数据解析到模板中,然后显示。
下面是一个具体的实现例子
目录结构
|- ClassRenderTest.php //测试解析classlist.html |- StudentRenderTest.php //测试解析studentlist.html |- render / TemplateParser.php //模板解析类 |- render / Render.php //解析模板的所有类的基础类 |- render / StudentRender.php //解析模板studentlist.html的类 |- render / ClassRender.php //解析模板classlist.html的类 |- template / studentlist.html //模板文件 |- template / classlist.html //模板文件 |
注意:
1、这里模板解析类选用了简单的“TemplateParser.php”,根据个人的需要你可以选用任何一种模板解析类;
2、如果每个模板解析都直接调用“TemplateParser.php”,可能会有大量的重复代码出现,这是oo思想所不准许出现的。因此采用“Render.php”对它进行包装,然后再对“Render.php”里面的Render类进行扩展,来对不同文件模板进行解析;
3、不同的模板解析类的,使用的方法是不同的,他们的包装方式也可能不同。
4、“StudentRender.php”“ClassRender.php”就是包装过的Render类,分别用来满足解析“studentlist.html”“classlist.html”的需要。
文件1:classlist.html
current time is : _now_ <BR><BR> current school class list : <TABLE border=1> <TR> <TH>ID</TH> <TH>NAME</TH> <TH>GRADE</TH> <TH>CLASS</TH> </TR> BEGIN_classlist_ <TR> <TD>_cid_</TD> <TD>_cname_</TD> <TD>_grade_</TD> <TD>_class_</TD> </TR> END_classlist_ </TABLE> |
文件2:studentlist.html
current time is : _now_ <BR><BR> current class is : <TABLE border=1> BEGIN_classinfo_ <TR> <TH>class id: _cid_</TH> <TH>class name: _cname_</TH> <TH>class grade: _grade_</TH> <TH>class num: _class_</TH> </TR> END_classinfo_ </TABLE><br> current class's student : <TABLE border=1> <TR> <TH>ID</TH> <TH>NAME</TH> <TH>SCORE</TH> </TR> BEGIN_studentlist_ <TR> <TD>_sid_</TD> <TD>_sname_</TD> <TD>_score_</TD> </TR> END_studentlist_ </TABLE> |
文件3:TemplateParser.php
下面的模板解析类是笔者临时写的一个简单的模板解析类,功能很少,没有真正什么使用价值。但是在这里可以满足这篇文章讲解的需要。
同时,如果以前没有接触过模板解析,对模板解析的实现方法有一定疑问的同僚,可以研究一下这个简单类实现解析的方式,代码挺简单的应该能看懂的。
这个解析类有自己的模板结构,“块”(要进行循环显示的地方)的定义如下:
BEGIN_你的块名_
......html代码.......
_你的块里面的变量的名称_
......html代码.......
END_你的块名_
变量的定义方式如下:
......html代码.......
_你的块里面的变量的名称_
......html代码.......
具体的“块”和“变量”的使用参考上面的两个模板
<?php /* * template parse class */ class TemplateParser{ /* * @var template root directory */ var $root = ''; /* * @var template filename */ var $tpl = ''; /* * @var data for parse template */ var $data = array(); /* * @var template parse result */ var $result = ''; /* * construct function */ function TemplateParser($root=''){ $this->root = $root; } /* * set template file name */ function loadTemplateFile($tplFile){ $this->tpl = $tplFile; } /* * set global var value; * * @param $varName global var name * @param $data var's value */ function setData($varName, $data){ $this->data['__ALL__'][$varName] = $data; } /* * set global var value; * * @param $blockName template block name * @param $data var value * @param $rec var value */ function setBlockData($blockName, &$data, $rec=false){ $this->data[$blockName] = &$data; $this->rec[$blockName] = $rec; } /* * parse template action */ function parse(){ $tplstr = file_get_contents("{$this->root}/{$this->tpl}"); foreach($this->data as $block=>$value){ $tag = "|BEGIN_{$block}_(.*)END_{$block}_|sm"; preg_match($tag, $tplstr, $tmpdata); if($tmpdata[1]!=null){ $tmpstr = ''; if($this->rec[$block]){ foreach($value as $subValue) $tmpstr .= $this->_parseBlock($tmpdata[1], $subValue); }else{ $tmpstr .= $this->_parseBlock($tmpdata[1], $value); } } $tplstr = preg_replace("|BEGIN_{$block}_(.*)END_{$block}_|sm", $tmpstr, $tplstr); } $tplstr = $this->_parseBlock($tplstr, $this->data['__ALL__']); $this->result = $tplstr; } /* * parse block * * @param $str string one block string * @param $data array data for parse */ function _parseBlock($str, $data){ foreach($data as $key=>$value){ $keys[] = "_{$key}_"; $values[] = "$value"; } return str_replace($keys, $values, $str); } /* * return parse result */ function get(){ return $this->result; } /* * show parse result */ function show(){ echo $this->result; } } ?> |
文件4:Render.php
<?php /* * include template parser class */ require_once "TemplateParser.php"; /* * base render class */ class Render{ /* * @var object of template parser class */ var $parser = ""; /* * instruct function */ function Render($root, $tplFile){ $this->parser = new TemplateParser($root); $this->parser->loadTemplateFile($tplFile); } /* * add data to template parser * * @param $data array() data for parse */ function initData(&$data){ return ; } /* * show template parse result */ function show(){ $this->parser->parse(); $this->parser->show(); } } ?> |
文件5:StudentRender.php
<?php /* * include base class */ require_once "Render.php"; /* * shudent list show render */ class StudentRender extends Render{
function StudentRender(){ parent::Render('./template', 'studentlist.html'); }
function initData($data){ $this->parser->setData('now', date('Y-m-d H:i:s')); $this->parser->setBlockData('classinfo', $data['class'], false); $this->parser->setBlockData('studentlist', $data['student'], true); } } ?>
|
文件6:ClassRender.php
<?php /* * include base class */ require_once "Render.php"; /* * class list show render */ class ClassRender extends Render{
function ClassRender(){ parent::Render('./template', 'classlist.html'); }
function initData(&$data){ $this->parser->setData('now', date('Y-m-d H:i:s')); $this->parser->setBlockData('classlist', &$data['class'], true); } } ?>
|
--------------------------------------------------
下面两个是测试文件,第一个比较简单一些
--------------------------------------------------
测试文件1:ClassRenderTest.php
<?php /* * include "class list show render" */ require_once "render/ClassRender.php"; /* * data for parse * * include (class list) */ $data = array('class'=>array('1'=>array('cid'=>1, 'cname'=>'class one', 'grade'=>3, 'class'=>1), '2'=>array('cid'=>2, 'cname'=>'class two', 'grade'=>3, 'class'=>2), '3'=>array('cid'=>3, 'cname'=>'class three', 'grade'=>4, 'class'=>1), '4'=>array('cid'=>4, 'cname'=>'class four', 'grade'=>4, 'class'=>2), '5'=>array('cid'=>5, 'cname'=>'class five', 'grade'=>5, 'class'=>1))); /* * do template parse */ doRender($data); /* * may see as controler's action, use to parse template */ function doRender(&$data){ $render = new ClassRender(); $render->initData($data); $render->show(); } ?> |
运行结果:
current time is : 2004-05-10 23:51:26 <BR><BR> current school class list : <TABLE border=1> <TR> <TH>ID</TH> <TH>NAME</TH> <TH>GRADE</TH> <TH>CLASS</TH> </TR> <TR> <TD>1</TD> <TD>class one</TD> <TD>3</TD> <TD>1</TD> </TR> <TR> <TD>2</TD> <TD>class two</TD> <TD>3</TD> <TD>2</TD> </TR> <TR> <TD>3</TD> <TD>class three</TD> <TD>4</TD> <TD>1</TD> </TR> <TR> <TD>4</TD> <TD>class four</TD> <TD>4</TD> <TD>2</TD> </TR> <TR> <TD>5</TD> <TD>class five</TD> <TD>5</TD> <TD>1</TD> </TR> </TABLE> |
测试文件2:StudentRenderTest.php
<?php /* * include "shudent list show render" */ require_once "render/StudentRender.php"; /* * data for parse * * include (one class info) and (one class's student list) */ $data = array('class'=>array('cid'=>1, 'cname'=>'class one', 'grade'=>3, 'class'=>1), 'student'=>array('1'=>array('sid'=>1, 'sname'=>'stu one', 'score'=>100), '2'=>array('sid'=>2, 'sname'=>'stu two', 'score'=>90), '3'=>array('sid'=>3, 'sname'=>'stu three', 'score'=>80), '4'=>array('sid'=>4, 'sname'=>'stu four', 'score'=>95), '5'=>array('sid'=>5, 'sname'=>'stu five', 'score'=>55))); /* * do template parse */ doRender($data); /* * may see as controler's action, use to parse template */ function doRender(&$data){ $render = new StudentRender(); $render->initData($data); $render->show(); } ?> |
运行结果:
current time is : 2004-05-10 23:52:22 <BR><BR> current class is : <TABLE border=1> <TR> <TH>class id: 1</TH> <TH>class name: class one</TH> <TH>class grade: 3</TH> <TH>class num: 1</TH> </TR> </TABLE><br> current class's student : <TABLE border=1> <TR> <TH>ID</TH> <TH>NAME</TH> <TH>SCORE</TH> </TR> <TR> <TD>1</TD> <TD>stu one</TD> <TD>100</TD> </TR> <TR> <TD>2</TD> <TD>stu two</TD> <TD>90</TD> </TR> <TR> <TD>3</TD> <TD>stu three</TD> <TD>80</TD> </TR> <TR> <TD>4</TD> <TD>stu four</TD> <TD>95</TD> </TR> <TR> <TD>5</TD> <TD>stu five</TD> <TD>55</TD> </TR> </TABLE> |
分享到:
相关推荐
在这本书中,你可以学习如何使用 PHP 编程语言结合 MVC 设计模式来构建现代化的 Web 应用程序。 该书通常会涵盖以下内容: MVC 设计模式: 介绍 MVC 设计模式的概念、原理和基本组成部分,包括模型、视图和控制器...
使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。 模型-视图-...
最小的PHP_MVC程序 tinyMVC/application tinyMVC/view tinyMVC/index.php
TinyMVC 是一个 PHP 的 MVC (Model-View-Controller) 应用程序框架,提供了数据库操作、表现层以及控制逻辑的分离。
这是一个根据MVC模式开发的一个小型框架。 说明: framework文件是框架文件,可将其重命名成你的项目名 Index.php文件是项目的入口文件 Config目录下的config文件配置了数据库的连接,网站url的访问方式 Control...
PHP MVC PHP中Model-View-Controller架构模式的最佳实现!特征范本路由筛选器快取验证数据注解安全要求PHP 7.x安装 $ composer require php-mvc-project/php-mvc服务器配置服务器必须将整个请求发送到./index.php...
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化...
mvc设计模式的讲解与使用 常见WEB开发语言的MVC框架 jsp+servlet+javaBean实现MVC –流程 jsp+servlet+javaBean实现MVC –技术点 PHP与JAVA在MVC模式上的不同之处 MVC设计模式的优势 MVC设计模式的缺点 MVC结构提供...
https://blog.csdn.net/weixin_39934453/article/details/132242216PHP傻瓜也能搭建自己框架,手把手搭建一个mvc框架PHP最简单自定义自己的框架(一) PHP最简单自定义自己的框架创建目录结构(二) PHP最简单自定义...
1.使用PHP的MVC框架,将应用程序分为Model、View、Controller三大部分,确保代码的可维护性和可扩展性。 2.使用MySQL数据库作为数据存储方式,实现用户信息、彩票信息等数据的存储和管理。 3.实现用户注册、登录、...
与传统的新闻网站不同,本系统采用了MVC(Model-View-Controller)架构,将系统的业务逻辑、数据和用户界面进行了分离,以实现更好的代码可读性和可维护性。 系统将包括以下功能: - 用户登录和注册 - 新闻发布和...
在PHP中使用MVC越来越流行了,特别是在一些开源的框架当中。MVC足以应对大多数的情况,但还有一些情况是其不太适合的,如比较简单的个人博客,对于只有几百篇文章量级的博客,使用MVC让人觉得有些太复杂了;同样对于...
本文以一个实例的形式讲述了PHP实现MVC框架的过程,比较浅显易懂。现分享给大家供大家参考之用。具体分析如下: 首先,在学习一个框架之前,基本上我们都需要知道什么是mvc,即model-view-control,说白了就是数据...
A blazing fast Model View Controller framework MicroMVC 是一个基于模块化设计的 MVC 框架,提供全功能的 ORM 库、移植以及管理脚手架,同时提供很多常用的 PHP 工具包。 标签:MicroMVC Web框架
PHP的MVC编程思想目前已经被广泛使用于各种大型项目的开发,很多成熟的MVC框架也逐渐被大家所熟知并被广泛应用于各类项目中,比较常见的如ThinkPHP、codeigniter、Symfony、yii、cakePHP等等。本文就来简述一下php的...
基于PHP实现的网上留言管理系统采用 B/S(Browser/Server)应用架构以及MVC(Model View Controller)编程架构设计开发。具体的开发细节是使用PHP语言完成系统的开发。整个系统不仅能够对网上留言信息进行录入、...
V View层 视图:指模版。 C Control层 控制器:就是通过控制器来实现模版,模型之间的控制关系。 二、实例分析: 1.ACTION 控制器: 位置 D:\www\aoli\Home\Lib\Action\IndexAction.class.php 代码如下: p
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 PHP中MVC模式也称Web MVC,从上世纪70年代进化而来。MVC...
TinyMVC 是一个 PHP 的 MVC (Model-View-Controller) 应用程序框架,提供了数据库操作、表现层以及控制逻辑的分离。
PHP MVC REST API使用指南 什么是REST API? 如果您曾经在手机中使用过Facebook,Twitter或任何其他应用程序,则这些应用程序需要连接到Internet才能从其网站获取数据或向其网站发送数据。 新增路线 要创建新路由,...