PHP.MVC的模板标签系统(二)


Posted in PHP onSeptember 05, 2006

The Php.MVC Tag Action Dispatcher

    TagActionDispatcher是一个标准的ActionDispatcher类的实现,它支持访问基本模板标签.TagActionDispatcher类支持相同的ActionObjects集合和ViewResourcesConfig属性作为默认的ActionDispatcher.TagActionDispatcher类能被用在带有或没有带有模板标签系统上,尽管由于它的额外处理会造成小的性能下降.
    模板标签库是PHP.MVC框架结构的子系统.模板标签库联合TagActionDispatcher一起工作来支持一些简单的模板标签.
    下面的图表显示了PHP.MVC模板标签系统的总揽.左边展示的是模板标签系统的程序流程.右边是TagActionDispatcher的程序流程,还有标签模板是怎样使这些类进行交互.

PHP.MVC的模板标签系统(二)   

1.初始化
    当控制器传递控制到达TagActionDispatcher,一些初始化触发去设置ActionObjects和ViewResourcesConfig属性为了使用我们的模板:
    从request中重新获得$form,$errors和$data对象,如果这些对象中的任意一个已经在之前被创建(比如在Action类中),那么对象现在将在资源模板中不可见,否则对象将被设置为NULL.
    重新获得ViewResourcesConfig对象的参考,它包含了配置参数.
    设置在ViewResourcesConfig参数中指向模板源文件和编译的模板文件的路径.
2.设置标签页面
    模板源文件的扩展名(可能是".ssp")被用来和ViewResourcesConfig->tagFlagStr参数相比较来决定是否这个页面需要处理,否则页面将被处理为标准(无标签)模板文件.我们能在view-resources元素中配置标签文件扩展名,就像这样:
    <view-resources
 ...
 tagFlagStr = ".ssp"
 tagFlagCnt = "-4"
 ...
    </view-resources>
    tagFlagStr指示了标签模板源文件能被预处理,比如:myPage.ssp.这个扩展名触发标签处理.属性tagFlagCnt定义了文件名结尾的字符数,包括"."(xxxYyy.ssp).据个例子,-4代表源文件名最后4个字符.默认值是.ssp和-4,因此如果我们使用一个模板文件名像myPage.ssp,我们不需要设置这些参数.
3.处理标签文件
    模板标签系统决定是否运行标签处理器,要根据ViewResourcesConfig->processTags属性.如果这个属性为真,模板页(及它所包含的页)将被标签处理器类所处理,否则标签处理器不会被调用.开发者只要将它在开发中将其设置为真即可,假则不处理.但要注意的是当processTags属性设置为真,修改过的标签页才会被编译(这依赖于compileAll属性设置).我们能定义processTags属性在view-resources元素,就像这样:
    <view-resources
 ...
 processTags = "True"
 ...
    </view-resources>
    注意,它的默认值是假.
4.编译模板页.
    如果TagActionDispatcher决定模板页将被处理,那么它会传递控制给模板标签系统.现在模板标签系统将决定是否只编译修改过的页,还是编译所有页.这种行为使用ViewResourcesConfig->compileAll属性来定义.我们定义compileAll属性就像这样:
    <view-resources
 ...
 compileAll = "True"
 ...
    </view-resources>
    这个属性默认为假.
5.只编译修改的页.
    如果compileAll属性设置为假(默认值),那么只会编译修改过的页.据个例子,如果被请求的页面自从上次被请求以来被修改过,此页将会被编译.
6.编译所有的页.
    如果compileAll属性设置为真,模板标签系统将总是编译页面(包括包含的页面)无论此页面自从上次请求以来是否修改过.开发者使用在开发中使用这个选项能够保证所有的页面都被处理.
7.处理VIEW资源.
    在处理完模板页之后,控制权回到TagActionDispatcher.被请求的VIEW资源(模板文件)将被任何其他的正规PHP.MVC模板文件所处理.TagActionDispatcher重新获得被编译的页(包括包含的页面)并且将页面输出给用户的浏览器.如果模板标签系统没有被调用,TagActionDispatcher将被请求的页面作为正规的VIEW资源来处理.比如TagActionDispatcher能被用来代替标准的ActionDispatcher.

PHP 相关文章推荐
PHP syntax error, unexpected $end 错误的一种原因及解决
Oct 25 PHP
PHP 分页原理分析,大家可以看看
Dec 21 PHP
php &amp;&amp; 逻辑与运算符使用说明
Mar 04 PHP
使用PHP实现二分查找算法代码分享
Jun 24 PHP
PHP实现时间轴函数代码
Oct 08 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
Jun 03 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 PHP
php中get_cfg_var()和ini_get()的用法及区别
Mar 04 PHP
PHP获取QQ达人QQ信息的方法
Mar 05 PHP
PHP编程实现计算抽奖概率算法完整实例
Aug 09 PHP
PHP正则表达式笔记与实例详解
May 09 PHP
PhpSpreadsheet设置单元格常用操作汇总
Nov 13 PHP
PHP.MVC的模板标签系统(一)
Sep 05 #PHP
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 #PHP
Windows下PHP5和Apache的安装与配置
Sep 05 #PHP
玩转图像函数库―常见图形操作
Sep 03 #PHP
生成静态页面的PHP类
Jul 15 #PHP
删除无限级目录与文件代码共享
Jul 12 #PHP
PHP截取中文字符串的问题
Jul 12 #PHP
You might like
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python实现telnet客户端的方法
2015/04/15 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python中文字符串截取问题
2015/06/15 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
Numpy的简单用法小结
2019/08/28 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
python os.rename实例用法详解
2020/12/06 Python
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
linux面试相关问题
2013/04/28 面试题
车贷收入证明范本
2014/01/09 职场文书
水利水电专业自荐信
2014/07/08 职场文书
民事代理词范文
2015/05/25 职场文书