PHP实现MVC开发得最简单的方法——视图及模版技术
前天谈到MVC中的单点入口,今天我们主要谈谈MVC中的view(视图)。视图主要是把数据渲染现实给用户,其实就是把数据转化成THML输出给用户。在之前,我们一定都或多或少的了解过一些模版系统,比如说smarty,phplib,fasttemplate等等。模版系统不是完整意义上的视图,更加确切的说模版系统只是视图中的一个功能点。当然现在的模版系统的功能是越来越强大,比如说smarty实现了缓存的部分功能。
关于模版系统的比较,大家可以看看这篇文章。模版系统原理其实很简单,就是把标签替换成相应的数据。但每个模版系统的实现方式都不完全一样,比如说smarty是编译型的,它第一个是把模版文件编译成相应的php文件,然后以后每次就直接调用编译后的文件,而PHPLIB是解析性的,每次都调用模版使用正则来替换。所以除了第一次smarty相对来说更加快。但是我不觉得使用标签有什么特别得好处。所谓得标签实现美工和程序分类,我认为是扯蛋。对于美工人员来说 {$var}和 有什么区别呢?
在这里,我们做一个最简单的view类。
首先,我们用函数实现一个最基本的渲染功能。
[code=php]
<?
function render($template,$vars)
{
if(!file_exists($template))die($template.'不存在!');
ob_start();
if(is_array($vars)){
foreach($vars as $key=>$value){
$$key=$value;
}
}
require $template;
return ob_get_clean();
}
?>
[/code]
如果你对ob_start不熟悉,请自己查阅手册。使用这个函数可以实现一个简单的view,比如说简单变量,数组,对象,模块化等等。
下面是一个使用demo,只贴出最核心的使用例子,模版文件请下载demo。
[code=php]
<?
function renderAction(){
$t_path=SITE_PATH.'/app/views/';//设置模版文件的路径
$array=array(
'simple_var'=>'简单变量!',
'array_var'=>array(
'array1'=>'变量1的值',
'array2'=>'变量2的值',
),
'file_template'=>render($t_path.'viewer2.php',array('var2'=>'文件2中的变量!'))
);
echo render($t_path.'viewer.php',$array);
}
?>
[/code]
这里面用到了上一节的一些东西,不明白的请看《PHP实现MVC开发得最简单的方法——单点入口》
实现后的效果图:
最后提供一个类,实现类似zf的view的功能,关于它的使用,我就不多说了,很简单。
[code=php]
<?
/**
*作者:feifengxlq
*原文地址:[url=http://www.phpobject.net/blog/read.php/96.htm]http://www.phpobject.net/blog/read.php/96.htm[/url]
*时间:2007-1-12
*/
class viewer
{
var $path;
/**
* 构造函数
*/
function viewer($path='')
{
if(!empty($path))$this->set_tpl_path($path);
}
/**
* 设置模版文件路径
*/
function set_tpl_path($path)
{
if(!file_exists($path))$this->error(1,$path);
$this->path=$path;
}
/**
* 渲染视图
*/
function render($template)
{
if(!file_exists($this->path.$template))$this->error(2,$this->path.$template);
ob_start();
require $this->path.$template;
return ob_get_clean();
}
/*--------私有方法----------------------*/
/**
* 出错处理
*/
function error($id,$other='')
{
switch($id)
{
case 1:
$errormsg=$other.' 不是有效的文件路径!';
break;
case 2:
$errormsg=$other.' 不是有效的模版文件!';
break;
default:
break;
}
die($errormsg);
}
}
?>
[/code]
提供整个demo文件下载。
转自: [url=http://www.phpobject.net/blog/read.php/96.htm]http://www.phpobject.net/blog/read.php/96.htm[/url]
页:
[1]