Zend framework处理一个http请求的流程分析


Posted in PHP onFebruary 08, 2010

Zend framework处理一个http请求的流程分析

 

1, 首先是bootstrap过程,初始化程序里用到的资源

2, 创建一个Zend_Controller_Front实体,实现front controller模式,这个实体类会负责将http请求派遣到恰当的controller的action里。

3, Front controller会创建俩个对象来封装http请求和http回复,分别是Zend_Controller_Request_Http和Zend_Controller_Response_Http

4, Front controller会创建俩个对象来实现url寻路和派遣,分别是routing和dispatcher, 分别负责找到指定url应该执行的控制器和动作,和载入对应的程序文件并执行对应的方法。

5, 通过controller的plugin机制,Zend_Controller_Action_ViewRenderer会为controller的实体类创建一个view属性,这个view是一个Zend_View的实体对象。它还负责在controller action请求处理完成后,将相应的template文件render呈现到http response对象里。最后response对象的内容会由Front Controller输出到浏览器。

6, 在第五步中,虽然template文件是由ViewRender助手对象来定位的,但是是由Zend_VIew的一个成员函数执行的(include进这个template文件),所以在Controller里属性里view对象的所有属性和成员函数在template文件里都可以被使用。

 

这样一个http请求的生命周期就结束了,浏览器获得了内容。在controller的action给view指定要呈现的变量时,它一般会通过Zend_Db_Table与数据库交互,获得数据。

与数据库交互处理数据称为business logic, template文件里也会包涵简单的循环等逻辑,这个称为display logic。

在MVC实现中,Model负责处理business logic, View负责处理display logic,而Controller则负责协调这俩部分,从而Controller的代码应该尽量简洁,它只是作为一个agent存在的。

PHP 相关文章推荐
PHP小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
php中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
php各种编码集详解和以及在什么情况下进行使用
Sep 11 PHP
调试一段PHP程序时遇到的三个问题
Jan 17 PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 PHP
destoon复制新模块的方法
Jun 21 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
Java中final关键字详解
Aug 10 PHP
Yii2简单实现给表单添加验证码的方法
Jul 18 PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
PHP函数常用用法小结
Feb 08 #PHP
在PHP中养成7个面向对象的好习惯
Jan 28 #PHP
php 正确解码javascript中通过escape编码后的字符
Jan 28 #PHP
php读取xml实例代码
Jan 28 #PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 #PHP
认识并使用PHP超级全局变量
Jan 26 #PHP
php 静态变量与自定义常量的使用方法
Jan 26 #PHP
You might like
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
FCKeditor的安装(PHP)
2007/01/13 PHP
解析dedeCMS验证码的实现代码
2013/06/07 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
Python获取服务器信息的最简单实现方法
2015/03/05 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
python如何实时获取tcpdump输出
2020/09/16 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
国际商务系学生个人的自我评价
2013/11/26 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
2015年推普周活动总结
2015/03/27 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书
教你用python实现12306余票查询
2021/06/30 Python