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调用Oracle存储过程
Oct 09 PHP
动态新闻发布的实现及其技巧
Oct 09 PHP
php项目打包方法
Feb 18 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
Mar 18 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
May 20 PHP
thinkPHP中_initialize方法实例分析
Dec 05 PHP
php实现多维数组排序的方法示例
Mar 23 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 PHP
PHP的微信支付接口使用方法讲解
Mar 08 PHP
详解Laravel服务容器的优势
May 29 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
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
php反弹shell实现代码
2009/04/22 PHP
JavaScript 程序编码规范
2010/11/23 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
Javascript事件实例详解
2013/11/06 Javascript
js select option对象小结
2013/12/20 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
2016/04/17 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
JS碰撞运动实现方法详解
2016/12/15 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
Python2.x中文乱码问题解决方法
2015/06/02 Python
编写Python CGI脚本的教程
2015/06/29 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
python适合人工智能的理由和优势
2019/06/28 Python
Django 全局的static和templates的使用详解
2019/07/19 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
python -v 报错问题的解决方法
2020/09/15 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
UGG英国官方网站:UGG UK
2018/02/08 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
技术总监个人的自我评价范文
2013/12/18 职场文书
实习护士自荐信
2014/06/21 职场文书
县政府班子个人对照检查材料
2014/10/05 职场文书
2014年科普工作总结
2014/12/06 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers