Tag-Archive for » zend «

变态有趣的Zend Framework用法

  通常,使用ZF的人都对Controller很感兴趣,尤其是Rewrite和Router功能很吸引人,不过因为一些特殊原因,比如大项目中涉及大量的rewirte条件,导致全部交给php来处理有些难以接受,这个时候就可能会放弃掉ZF的Index.php文件, 而采用传统的PHP文件结构,这时的ZF如何使用呢?

  前一段时间完成的6.cn 的专辑改造 (http://6.cn/zj),完全基于了ZF来实现,但却没有使用ZF的index.php文件,在目录结构上,完全参照了ZF标准的Models、Views、Controllers模式开发,只不过调用的地方直接调用Controller里面的Action,这相当于把Controller当作了一个普通的类来使用,这个方法经过使用,发现虽然有些变态,其实还是挺有趣和挺方便的。有兴趣的朋友可以尝试一下,感觉似乎更灵活,有时index.php会带来很多思路上的束缚 🙂

解决了ZF的两个问题

  之前提到Zend Framework的三个问题,有两个问题今天晚上搞明白了。

  • ErrorController官方文档里面提到的_getRequest(‘error_handler’)方法不存在的问题,改成 $this->_getParam(‘error_handler’)即可解决。
  • Controller里面的init()方法会在基类的构造函数__construct()之前调用的问题,通过阅读 Zend_Controller_Action类里面的100-130行找到解决办法,就是在基类的__construct()里面,把 parent::__construct($request, $response, $invokeArgs); 移到初始化操作之后,比如__construct()的最后一行即可解决。

  第三个关于 useDefaultControllerAlways 参数导致_forward()方法的controller参数失效的问题不是太紧急,回头再研究。

  顺便提一下,ZF的Router功能实在太强大了,甚至支持正则匹配,完全可以写出任何你想要的灵活的URL来,赞!

Memcached和Lucene笔记

  前段时间完成的项目使用了大量的Memcached,整个架构在性能上的确提高了很多,的确不是一点点的提高,面向大负载访问的时候,MySQL数据库仍然可以做到轻量级的负载,效果不错,建议有条件的朋友一定要把项目改造到Memcached上,著名的Vbb论坛当前的版本就已经开始支持使用Memcached进行论坛数据缓存。我原来在MOP的时候,我们也大量的采用这个东西。

  在使用Memcached方面,谈不上什么经验,反正极端的性能最大化就是使用永久的缓存,通过你的程序逻辑去控制和维护MC里面的缓存数据,我做的项目就是这样处理的,程序的逻辑的确增加了复杂度,但是对于商业项目来说,这种付出是非常值得的。

  Memcached唯一可能需要注意的是,他对key的操作不是原子级别的,所以在高并发处理的时候,对同一个key的写操作可能会导致覆盖,这个需要自己从程序逻辑上进行处理,这个理论我并没有深入研究,不过JH看了源代码给了我这样的结论,按照JH的实力和人品,我认为有80%以上的可信度:)

  对于Lucene,大部分人都不陌生,相关的技术也不用太多讲解,网上到处都是相关的文档。我最近想通过PHP来找到一个最佳的整合Lucene的方法,并且应用到正规的商业应用中,目前知道的可选方案是Pecl的Clucene模块和Zend Framework的 Zend_Search_Lucene 模块,这两个东西目前我使用的感觉都不算太好,另外还有一种是使用 PHP的 Java扩展支持(有两种,一种是php_java扩展,一种是php_java的 bradge方式),这个感觉也比较怪异,最后还有一种知道的办法就是使用系统调用 java 命令执行Lucene功能。 这个没有试过,不知性能可以达到什么程度。

  在这里做个记号,等有了进一步的收获补进来。