介绍:Zend Framework如何创建视图(一)
在Zend Framework中创建视图(view)主要有两种方法:
a、通过在index.php文件中为Zend_Controller_Front实例对象添加VeiwRenderer参数,并将其设置为true,如下图。
b、通过在index.php文件中为Zend_Controller_Front实例对象添加noVeiwRenderer参数,并将其设置为true,在Controller中进行创建。
本文主要是了解第一种情况下视图(view)是被如何创建的。
开始执行程序:
1.程序会先调用Zend_Controller_Front实例对象的dispatch方法,该方法会去判断Zend_Controller_Front实例对象中是否将ViewRenderer设置为true,在动作经纪助手中是否存在viewRenderer这个助手,如果ViewRenderer被设置为true并且动作经纪助手中不存在viewRenderer,那么将创建一个试图解析(ViewRenderer)助手,将默认值设为-80。
2.进入Zend_Controller_Action_HelperBroker_PriorityStack对象的offsetSet方法,会去判断传进来的动作助手(此刻为Zend_Controller_Action_Helper_ViewRenderer)是否属于抽象类Zend_Controller_Action_Helper_Abstract的子类,然后判断一个由助手名称为key构建的字典($_helpersByNameRef)中是否存在该动作助手的名字,如果存在将从$_helpersByNameRef和_helpersByPriority两个字典中删除该数据项。在去判断另一个传参——-80是否已经作为key存在于$_helpersByPriority中,如果存在系统将重新为该优先值赋值——遍历整个$_helpersByPriority的key集合,存在就将该传参+1,然后将+1后的值再一次扔进遍历总重新判断,直到$_helpersByPriority中不存在该key值。例如,-80存在了,那么回去判断-79是否存在,不存在的话,将-79作为_helpersByPriority中的key,动作助手作为value存入数据字典中。最后$_helpersByPriority需要遵循一个后进先出原则(LIFO),通过krsort函数将($_helperByPriority)重新排序,退出offsetSet方法。
3.回到先前的dispatch方法中,得到或实例化request、response、router和dispatcher对象。然后通过dispatcher(Zend_Controller_Dipatcher_Stanard)对象的dispatch方法去处理每个Controller和Action,由于每个Controller对象都继承Zend_Controller_Action类,在Zend_Controller_Action初始化过程中又会创建Zend_Controller_Action_HelperBroker对象,该对象在初始化过程中又将循环静态变量$_stack,该静态变量就是Zend_Controller_Action_HelperBroker_PriorityStack对象的一个实例,然后执行每个存在$_helperByPriority字典中的助手对象的init方法,此刻ViewRenderer已经存在该字典中,所以ViewRenderer的init方法,该方法将初始化视图(view)。
其实,如果我们在第1步中,未能通过那个条件判断(noViewRenderer为true或viewRenderer已经存在)那么将跳过第2步,在第3步中如果存在viewRenderer助手,那么创建view;如果不存在那么就不会创建view,所有的view讲需要开发人员手动创建。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架