手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2024年09月的文章

老王梳理的Zend Framework Bootstrap机制

以下是老王梳理的内容,bootstrap对于ZF来说非常重要,很大一部分人的程序损耗,都在这里。。。。

原文地址:http://hi.baidu.com/thinkinginlamp/blog/item/419f36d34b68c40a3af3cfc9.html

说点题外话,单就框架而言,对我而言使用CakePHP要比使用Zend Framework顺手得多,不过最近CakePHP陷入了多事之秋,Phpnut,Gwoo,Nate彻底闹僵,Gwoo和Nate选择离开,据坊间传闻他们已经开始另立门户,稍后会释出一个CakePHP的衍生框架:Lithium。虽然CakePHP官方已经表态会一如既往的继续前进,但毫无疑问在众多开发者眼中,CakePHP的前景已经不再明朗,其是否能继续保证PHP框架领头羊的地位也越发充满疑问。

之所以说了这么多题外话,就是为了说明一点,对于广大PHPer而言,过多局限于一种框架之上本身就是一种强耦合,未来是不可预期的。所以我打算在继续使 用CakePHP的同时,适当向Zend Framework倾斜,如果Lithium不错的话,也会在我未来学习计划之中占有一席之地。

言归正传,新版的Zend Framework引入了Zend_Application,把Bootstrap进行的规范化的封装,一个典型的Application的Bootstrap文件大致如下:

PHP代码
  1. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap  
  2. {  
  3.     protected function _initAutoloader()  
  4.     {  
  5.         $autoloader = new Zend_Application_Module_Autoloader(array(  
  6.             'namespace' => 'Application',  
  7.             'basePath' => APPLICATION_PATH,  
  8.         ));  
  9.   
  10.         return $autoloader;  
  11.     }  
  12. }  

在Bootstrap中,所有以_init开头的方法被当做资源方法自动运行,如果方法有返回值的话,还会被作为资源保存。资源方法不是唯一配置资源的方 式,为了避免重复编码,框架包含了若干现成的资源插件,可以在配置文件里通过简单设置就可以达到相应的功能,一个典型的配置文件如下所示:

PHP代码
  1. return array(  
  2.     'bootstrap' => array(  
  3.         'path' => APPLICATION_PATH . '/Bootstrap.php',  
  4.     ),  
  5.     'resources' => array(  
  6.         'modules' => array(),  
  7.         'frontController' => array(  
  8.             'controllerDirectory' => APPLICATION_PATH . '/controllers',  
  9.             'moduledirectory' => APPLICATION_PATH . '/modules',  
  10.         ),  
  11.     ),  
  12. );  

resources部分的modules和frontController就是资源插件。其中modules资源开启了系统的模块功能。比如说你有一个admin模块的话,那么对应的也可以有一个它自己的Bootstrap类:

PHP代码
  1. class Admin_Bootstrap extends Zend_Application_Module_Bootstrap  
  2. {  
  3. }  

需要说明的一点是Modules的Bootstrap里一般不再需要类似前面的_initAutoloader资源方法,这是因为从父类 Zend_Application_Module_Bootstrap里已经通过继承自动执行了以模块名为命名空间的Autoloader操作。

在使用Modules的Bootstrap时,有一点需要注意的是系统会把所有模块的所有资源方法统统初始化一遍,打个比方来说,如果你有一个Blog模 块,还有一个Forum模块,每个模块使用各自独立的数据库配置,都有一个自己的_initDb方法,那么即便是我们单独访问Blog或者Forum中一 个模块,系统还是会把两个数据库都连接一遍,这无疑是低效的。但也不能就此认为这是Zend Framework的设计错误,问题的根源在于我们划分模块的粒度大小,如上所示,Blog和Forum不应该以Module的形式存在,而应该以 Application的形式存在。如此一来仅需要在Application层次的Bootstrap中执行一次数据库连接即可。

Zend Framework的文档虽然看似详细,但很多细节都没有说明,比如说View助手缺省就会加载,这一点可以在 Zend_Controller_Front中看到对Zend_Controller_Action_Helper_ViewRenderer的调用,所 以最好在使用时自己扎到源代码里查阅。

Tags: bootstrap, zf

哦哦哦,电池要被召回了

昨天把笔记本带到学校去用的时候,发现用了半小时突然提示没电,一直以为是电池长时间插着充电,需要激活的原因。
于是晚上回来进行了一次电池重置,到早上还没有结束。就关闭了。

然后把电源拔掉使用,又是半小时,突然提示没电。这才发现电池好象坏了。

把电池的型号进行搜索,发现居然是联想召回电池中的一款。郁闷啊。下载了测试软件进行测试,还真的有提示:http://batteryprogram.lenovo.com/ljbr/ValidateQuery.aspx?mt=7674&mm=HE1&ms=LV16N17&bbc=532FA251B4CE0B3FB64F4A4702A8735EBFE2999865874C5D9B6B6B640066B95772BC3ADD8C281AD19B6664CBB74E11C14BDF1DE7FFA60B0E0EAACA1BBC27569A&bf=1755C8FE9BDD2EC3920C06111C622AC6CEF389C52338E39AEAB73E19ACA96915C41A0E08E67B67ABCEB9AE50B5B256AC8F97E8E1ECD63BE2653136121D6C7DDC&ll=zh

准备打电话,可心里紧张,毕竟是水货。唉。。。。早知道不买水货了,购买商的素质又低,换根电源线都要拖个一星期。

如果不能召回更换,只能淘宝购买了。。。

Tags: 联想, thinkpad, 42t4568

快递又偷吃东西了……

这个新闻不是我的,所幸我还没有东西被快递吃过。但是。。。
我对圆通快递还是有话说的。有多次被圆通快递折腾了。郁闷的很
1、别人寄了台服务器给我,让他们送上门,结果是我自取的。理由是太重了。。。

2、某年的中秋前,有朋友寄了张月饼票给我,结果。。。该来的那天没来,周六周日不愿 送,说周一吧。可是,周日是中秋节。周六是取票的最后一天。郁闷

3、自己叫快递,早上打电话的,中午没到,下午打电话问什么时候过来,说是当天一定来一定来,结果等到将近8点也没有来。

自那以后,我宁可叫顺丰,再也不鸟圆通了。当然这是我的选择,如果我是收快递的,那我也没有办法,只能默默承受了,呵呵

以下是来自CB的案例:http://www.cnbeta.com/articles/96275.htm,还是只贴个链接吧。文中说是圆通。。不知道是不是这样。

Tags: 快递, 圆通

ZF 1.9.4 出来了

ZendFramework的更新速度不可谓不快,记得5月份的时候它还是1.7.8左右,如今 刚过去5个月,却已经是1.9.4了。
虽然说这几个月,发生了很多事,比如PHP5.3的推出、ZDE 7.1测试版推出等,ZF的速度也太快了吧?

changelog:http://framework.zend.com/changelog/1.9.4

quickstart:http://framework.zend.com/docs/quickstart

Tags: zend, framework

RegexIterator匹配和修改迭代器的数据集

本文来自phpCq.com,没有测试,主要是看了一下,它可以对数据进行正则匹配,想来对那些写文本数据库的人很方便吧?
取出一堆数据,平时用strpos来定位来判断,现在可以直接用数组的正则匹配,直接判断好。呵呵

 

http://www.phpcq.com/id/116.html
  1. <?php  
  2. /** 
  3. * 初定义数组... 
  4. * @author:PHP博客-技术-资源-技术站-面向对象  
  5.  */  
  6.     $array = array('apple','avocado','orange','pineapple');  
  7.     /** 
  8.      * 创建迭代器 
  9.      */  
  10.     $arrIterator = new ArrayIterator($array);  
  11.     /** 
  12.      * 使用正则表达式模式来匹配和修改迭代器的数据 
  13.      */  
  14.     $iterator = new RegexIterator($arrIterator,'/^a/');  
  15.       
  16.     print_r(iterator_to_array($iterator));  
  17.     /** 
  18.      * 输出结果:Array ( [0] => apple [1] => avocado )  
  19.      */  
  20. ?>        

Tags: regexiterator, 迭代器