Zend Framework学习笔记(二)


很多天没再研究Zend Framework了,趁着还有些闲时间,再次研究一下,Zend Framework学习笔记(一)中大概了解了一下Zend Framework的代码接口分布,《Zend Framework in Action》一书中给出的标准文件夹结构如下图: 个人觉得这个结构只适合很小的项目或者不太复杂的项目,因为zend Library是包含在项目里面与web_root同一级,假如我需要创建一个helloword_2的项目,那么不得不再复制一个同样的文件夹结构,Zend Library将会有两份,如果有十几个或者更多的这样的工程,那么Library将会有很多,Zend Framework是个很活跃的框架,没准哪天就升级了好几个版本,如果你需要升级或者打补丁,那么就会烦死。 当然在application下新建一个modules文件夹,将各个功能放在这里也是一个方法,但是你肯定不想一堆一点关联都没有的项目堆在一起,比如豆瓣的九点和群组,这两个几乎没有任何关联,当然实际应用中还有一个非常重要的用户模块。每个应用只做自己该做的事情,才会最大限度的独立很分散,无论是为了负载均衡进行多点发布还是代码维护都非常有用。而且所有的应用都通过一个入口(web_root中的index.php)和同一个分配器来处理,显然并发能力和容错能力都会下降,稍微有点差错,所有的应用都挂了。入口,分配器等属于全局的东西会影响所有应用,事实上可能很多东西对别的应用毫无用处,但是又有很多应用又需要,这时候就产生了浪费。 不过Zend Framework是个自由度很高的框架,可以自己定义一些东西,让Library从项目中独立出来,与项目目录平级,每个项目拥有自己的独立名称、web_root、入口和分配器,这样做可以为每个项目单独添加Vhost,升级内核(zend Library)也只要升级一个即可,有更高的自由度和松散度。所以我推荐如下的结构: 图中的test是一个项目名,请注意是项目名,不是功能名称,在application中你可以为这个项目建立很多modules,我在图中没有建立这样的文件夹,你可以建立test2,test3……项目,这些项目毫不相关,或者关联度很低,比如用户就得是一个独立的项目,其他的功能可能是一个或者几个独立的项目,事实上还有更好的目录结构,我是从神仙那里学过来的.在controllers文件夹中建立front, backend, amdin,三个文件夹,在view中也建立对应的文件夹,放在front中的内容不做任何限制,backend中需要登录,admin就不用说了,渲染views中对应文件夹的模板,全局进行权限控制,似乎神仙这样的结构不能提供精细访问权限,zend Framework提供了这样的精细权限控制。 如果你的代码要改成左图的结构,需要改动一些代码,首先是需要在入口文件中注册这些目录的位置代码如下: define(’APP_PATH’, dirname( dirname ( __FILE__ ) ) ); define(’LIB_PATH’, dirname( APP_PATH ) . "/library"); date_default_timezone_set(’Asia/Shanghai’); //directory setup and class loading set_include_path(’.’ . PATH_SEPARATOR . LIB_PATH . PATH_SEPARATOR . APP_PATH . ‘/application/models’ . PATH_SEPARATOR . get_include_path()); [...]

Zend Framework学习笔记(一)


1、请求  ,Zend_Controller_Request_Http 类提供了整个的HTTP访问需要的环境。 2、路由  ,路由特性是由 Zend_Controller_Router_Interface实现的,由Zend_Controller_Router_Rewrite提供URL重写功能。 3、分配器 ,Zend_Controller_Dispatch_Standard类控制 4、Actiong ,所有的动作都是源自于Zend_Controller_Action这个抽象类,Zend_Controller_Action提供了两个级别的处理请求,一个是init(),另外一个是preDispatch() init()函数是在控制器被调用的时候触发的  ,如果该控制器被调用多次,那么preDispatch()将被调用多次,而init()只调用一次。 5、Response(响应) Zend_Controller_Response_Http 是为编写web程序准备的 Zend_Controller_Response_CLI适应更多的场合 Zend_Controller_Response_Http包含三种信息:header,body和exception(异常) 6、Front Controller Plug-ins(前端控制器插件) 所有的插件都实现于Zend_Controller_Plugin_Abstract这个抽象类,一共有六个事件方法可以被重写。 1)routeStartup() 2)dispatchLoopStartup() 3)preDispatch () 4)postDispatch() 5)dispatchLoopShutDown() 6)routeShutDown()