《PHP设计模式介绍》第十七章 MVC 模式(2)_PHP教程
推荐:《PHP设计模式介绍》第十五章 表数据网关模式前一章中使用动态记录模式对数据库表进行建立,获取,更新(通过扩展实现删除)每一行的操作。动态记录模式是一种简单的抽象数据库连接的方式,但是这种简洁性也正是它的弱点。动态记录类只处理
使用savant的实例:
总有一些有复杂模版引擎甚至是"Plain Old PHP Pages"(popp)的模板无法可变换替换,而且嵌入了控制结构和其他逻辑到页面里。然而,给结果到你的应用程序的表述层的业务逻辑,维护就会变得相当困难。
注:写模版引擎
似乎写摸版引擎是php社区里的一种passage权利,搜索模版引擎逐字发现上百的结果。(这方面的实验例子可以看http://www.sitepoint.com/forums/showthread.php?t=123769)如果你不选择用普通的引擎,而是用你自己的,这儿有丰富的实例代码可以看。
地址http://wact.sf.net/index.php/TemplateView很好的概述了什么样式的标记可以被模版视图使用。包括一个属性语言,自定义标签,html备注以及自定义语法。
非常流行的模版引擎smarty(http://smarty.php.net/)是一个使用自定义语法方法的模版引擎的实例。
装载smarty引擎就像:
require_once ‘Smarty.class.php’; $tpl =& new Smarty; $tpl->assign(array( ‘title’ => ‘Colors of the Rainbow’ ,’colors’ => array(‘red’, ‘orange’, ‘yellow’, ‘green’, ‘blue’, ‘indigo’, ‘violet’) )); $tpl->display(‘rainbow.tpl’); |
rainbow.html的自定义语法就像:
<html><head> <title>{$title}</title> </head><body> <h1>{$title}</h1> <ol> {section name=rainbow loop=$colors} <li>{$colors[rainbow]}</li> {/section} </ol> </body></html> |
wact(http://wact.sf.net/)效仿了martin fowler在poeaa中概述的那种自定义标签。虽然wact支持一个与smarty相似的自定义语法作为快捷方式,wact的自定义标签列阵如下:
require_once ‘wact/framework/common.inc.php’; require_once WACT_ROOT.’template/template.inc.php’; require_once WACT_ROOT.’datasource/dictionary.inc.php’; require_once WACT_ROOT.’iterator/arraydataset.inc.php’; // simulate tabular data $rainbow = array(); foreach (array(‘red’, ‘orange’, ‘yellow’, ‘green’, ‘blue’, ‘indigo’, ‘violet’) as $color) { $rainbow[] = array(‘color’ => $color); } $ds =& new DictionaryDataSource; $ds->set(‘title’, ‘Colors of the Rainbow’); $ds->set(‘colors’, new ArrayDataSet($rainbow)); $tpl =& new Template(‘/rainbow.html’); $tpl->registerDataSource($ds); $tpl->display(); |
rainbow.html的模版如下:
<html><head> <title>{$title}</title> </head><body> <h1>{$title}</h1> <list:list id=”rainbow” from=”colors”> <ol> <list:item><li>{$color}</li></list:item> </ol> </list:list> </body></html> |
在这个wact例子里有相当多的包含的文件。这是因为框架有各种各样的要素来处理网站应用问题的各个部分。只需包含你需要的元素。在上面的例子中,模板就是一个View,dictionary data source 作为model的代理,php脚本本身是作为一个controller.许多自定义标签设计成与表格数据一起运用--像你从数据库中提取的记录集---转换成简单数组以后把它用在模版里。
最后一个样式是拥有一个模版的有效的xml文件,使用各自的要素的属性作为目标替换你的模版。这里有一个是用PHP- TAL的技术实例(http://phptal.motion-twin.com/)
// PHP5 require_once ‘PHPTAL.php’; class RainbowColor { public $color; public function __construct($color) { $this->color = $color; } } // make a collection of colors $colors = array(); foreach (array(‘red’, ‘orange’, ‘yellow’, ‘green’, ‘blue’, ‘indigo’, ‘violet’) as $color) { $colors[] = new RainbowColor($color); } $tpl = new PHPTAL(‘rainbow.tal.html’); $tpl->title = ‘Colors of the Rainbow’; $tpl->colors = $colors; try { echo $tpl->execute(); } catch (Exception $e){ echo $e; } |
rainbow.tal.html的模版文件如下
<?xml version=”1.0”?> |
分享:《PHP设计模式介绍》第十四章 动态记录模式到目前为止,您所看到的这些设计模式大大提高了代码的可读性与可维护性。然而,在WEB应用设计与开发中一个基本的需求与挑战:数据库应用,这些设计模式都没有涉及到。本章与接下来的两章—
- 相关链接:
- 教程说明:
PHP教程-《PHP设计模式介绍》第十七章 MVC 模式(2)。