免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1975 | 回复: 1

深入浅出理解zend framework(一) [复制链接]

论坛徽章:
0
发表于 2012-03-04 16:05 |显示全部楼层
深入浅出理解zend framework(一)








      写作本文的目的,不是详细叙述zend框架的功能,因为这些功能都可以从手册中查到,本文更加侧重于探寻zend框架原理,以及如何将zend框架应用到实际应用中。可以理解为深入浅出,深入了解原理就可以易如反掌的应用。

    文章里的内容,可能会有错误和理解不到位的地方,请您能够谅解,并给与指出,希望与您共同学习,共同进步。



开篇

      从根本上来讲,框架就是一个大程序集,将我们平时写程序必然或经常要用到的东西,尽量用通用的方式先实现一部分,我们可以在这个基础上去构建自己的程序,相当于在编程语言与需求实现之间又增加了一个框架层。框架出现的目的是为了简化编程复杂度,并且通过标准件来提升程序的安全性、健壮性等等。简化编程复杂度并不意味着编程变得简单了,从某些角度来看,其实是变得复杂了。因为原本直接就可以下手去写的代码,现在变得不知道该怎么去写了。出现这种现象的原因,是因为原来我们只需要理解用户需求,然后就可以实现了,但现在我们需要在理解用户需求的基础上,再去理解框架。编程语言只有一些基本语法,因此很容易理解,而框架,天生就带着作者的思维,这种思维不是技术角度的,比如怎么提供一种更优美高效的语法,而是业务角度的,即我的这个框架,如何才能帮开发人员去解决实际问题(用户需求),这样一来,正反两方向(最终用户和开发框架)都面临着较大的压力。化解压力的方法,笔者觉得就是,两个打通,首先打通框架与编程语言之间的通道,深入理解框架是如何用编程语言实现的,使用框架的时候,可以立即想到如果不用框架,直接用编程语言该如何实现。其次打通编程框架与用户需求之间的通道,前面提到过,编程框架是有思想的。这种思想往往倾向于标准化这个世界,倾向于非此即彼,从理论上来说,这样并没有错误,正如理论上来说,世界上只有好学生和坏学生这两种学生。不过具体到某个学生(用户需求)身上,又要在定性为好学生或坏学生后,再进行各种定量(性)的分析,才能最终实现用户需求。



Zend frameword大局观



        虽然zend frameword是一个松散的框架,各个模块之间近乎独立。但其之所以称之为框架,就必然有自己的体系结构,否则各个模块就无法组织到一起。Zend frameword最主要的组织结构就是MVC。这种模式最近在web开发中大行其道,我觉得有两种原因,一是他没有磨灭web就是文档的本质。View依然是对html的完整表达。二是他使view和生成view的controller和model可以用一种容易理解的方式进行分离和整合,进而使web开发进入工业化时代,可以大规模生产。下面简要介绍一下zend frameword的体系结构和运作方式。



ZendFrameword程序的目录结构



      使用ZF框架进行开发,包括其他使用MVC模式的框架,对于应用程序目录和文件名,都有很严格的规定。因为MVC会根据这些名称来寻找相应的M、V、C。所以一般框架会提供一个工具来生成应用程序的标准目录和一些配置文件,对于ZF,就是Zend_tool。利用这个工具生成的默认目录会包括(仅列出主要目录):

      Application

            Configs

            Controllers

            Models

            Views

            Bootstrap.php

      Library

            Zend_模块名称

      Public

            Index.php



     上面就是最主要的三个目录,library用于放置zend框架,这个不用多说,Application用于存放应用程序文件,视图、控制器、模型都在其中,如果项目很大,还可以在application中添加modules,每个modules下面可以有自己的configs,controllers,models,views。Public目录用于发布,也就是配置web服务器的时候,网站根目录是指向public的。

      下面我们看一下自动生成的两个文件,index.php和bootstrap.php。这两个文件是一切的开始。MVC模式一个重要的特性就是路由映射,通过路由映射找到相应的controller,然后调用models生成数据,再渲染视图。路由映射支撑了MVC模式,同时给用户提供了友好的,有特定意义的URL。路由映射功能是由web服务器和zf框架配合完成的。首先web服务器将用户所有的请求,全部转发到index.php(通过配置.htaccess文件)。Index.php初始化一个zend_application对象,然后调用该对象的run方法(run方法会执行bootstrap.php,进行一系列初始化操作,run方法执行哪一个文件,是由configs中的application.ini文件来配置的,默认是bootstrap.php)。这个run方法,就是用户和zend framework程序之间的桥梁,一切美丽的故事,都从这里开始。



ZendFrameword程序的执行流程

      首先就是上面提到的application对象,它会读取相关配置,并执行run方法,进行整个框架的初始化,然后将控制权交给前端控制器(front controller),前端控制器会首先执行进行路由映射,然后根据映射结果,去执行plugin,这个plugin一般是编程时进行插入的,主要就是授权(acl)和验证(auth)。授权和验证通过后,就会把这个用户请求分发给相应的控制器(conntroller),控制器调用模型(model),执行相关的业务逻辑,最后将结果渲染进视图(view)返回给用户。所有的zendframe程序,都会围绕上边这样一个主线,其他的各个模块,都是为了完成用户需求,在controller和model中调用执行的。



      了解了zf框架的大体框架和执行流程后,我们下面具体的介绍每个模块的实现原理及其在实际项目中的运用。模块的介绍顺序大体等同于zf的执行流程,因为这样更加直观易懂。如果按照通常的字母排序,则显得凌乱。



      Zend_Loader:http://www.cnblogs.com/abner-liu/archive/2012/03/03/2378724.html

      Zend_Config:http://www.cnblogs.com/abner-liu/archive/2012/03/04/2379148.html

论坛徽章:
0
发表于 2012-03-04 16:06 |显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP