Zend_Db里各种接口关系

这段时间主要在改数据库方面的东西,于是有时间对Zend_Db进行了解。

Zend_Db是最低层的封装,通过不同的适配器,来实现不同数据库和不同数据库接口之间的差别。现在最主要的使用pdo_mysql这个适配器,Mysqli也许也是个不错的选择。这个接口的数据库操作是需要自己写sql语句的,但还是提供了一些简单的功能封装。至于Oracle和Db2我就没试过了。

Zend_Db_Table是一个“表模式”,这种模式你能用面向对像的方式来操作数据库。在创建实现的时间,会要求你添加了个Zend_Db实例,因为所有的数据操作还是通过Zend_Db来完成的。

Zend_Db_Table_Row你可以把它看到是一条记录,当然是通过Zend_Db_Table里的某些方法创建的,让你操作对象一样修改某一种记录。但这里还是包装,Zend_Db_Table_Row的方法找Zend_Db_Table,结果Zend_Db_Table又去找Zend_Db。

Zend_Db_Table_Rowset是一个Zend_Db_Table_Row的迭代器。

Zend Framework 1.1 Roadmap

我已经好久一段时间没有写PHP的程序,这个小网站的程序也停了下来。一些工作转到了Django。最近去看1.1的Roadmap的时候,发现1.1将是一个非常重大的更新,LDAP在大型网站中是非常有用的服务,做为“企业级”的框架有些东西还是必要的。Zend_Cache方面看来也得到了强化。

ZF-2117 Code Generation Tool

这个看来是非常必要的,DRY,是个好东西

ZF-2116 View Layouts

已前在Zend_View与控制器结合不是非常紧密,现在通过Layouts技术来结合。总之1.1是个非常重要的版本。另外PDT也已经发布1.0的版本了,最近被eclipse的强大所感动了。

简单的方法优化Zend Framework的性能

在Zend Framework1.7中的Zend_Loader包中,加入了一个优化读取helper类的机制。只需要简单设置一下Zend_Loader_PluginLoader就可以达到效果。

Zend_Loader_PluginLoader::setIncludeFileCache($classFileIncCache);

$classFileIncCache指向一个过写的空白PHP文件,当有helper之类的文件需要加载时,会自动写入到$classFileIncCache文件中,以include_once的形式加载,在之后就会默认自动加载程序中用到的文件了。在许多的组件的读取helper过程中,已经判断了是否设置了$classFileIncCache,如果设置了就会写进这个文件,如果没有设置就是直接读取了。

关于自定的View_Helper可以设置Zend_Loader_PluginLoader的插件读取目录,具体可参考官方文档

看了就是一个汗啊

刚才在Google Friend Connect里面看到了social bar的东西,这个东西上面有成员、评论、活动这几个元素酷。这些看起来已经很有威力了,如果一个加入了足够多的Google Friend Connect,信息应该产生惊人的传播。

最终,所有的信息都重新流回了Google,真是高明至极。

使用ZF创建子域名站点

在开发Web站点的时候,经常会碰到提供子域名的服务之类的问题,而在Zend Framework的开发过程中,所有的链接都会被重写到index.php上。这样在实现子域名的开发上就有些麻烦,但在Zend Framework 1.7中,在一个新的路由器专门用来处理子域名的映射,Zend_Controller_Router_Route_Hostname。她的工作原理是这样的:

首页通过Zend_Controller_Router_Route_Hostname规则找到相对应的域名,根据域名你可以产生相关变量,如:控制器名称;用户ID等。这找到相对应的规则后,再对路径进行了路由规则进行匹配。就是说通过两次路由规则找到相对应的参数

假如有这样一个地址,gonefish.users.example.com/profile。创建如下规则:

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    ‘:username.users.example.com’,
        array(
            ‘controller’ => ‘profile’,
            ‘action’ => ‘userinfo’
        )
    );

$plainPathRoute = new Zend_Controller_Router_Route_Static(”);
$plainPathRoute2 = new Zend_Controller_Router_Route(
    ‘profile’,
    array(
        ‘action’ => ‘profile’
    ),
);

$router->addRoute(‘user’, $hostnameRoute->chain($plainPathRoute);
$router->addRoute(‘user’, $hostnameRoute->chain($plainPathRoute2);

第一种情况:访问gonefish.users.example.com。首先,路由系统先匹配gonefish.users.example.com域名,找到了控制名和动作名;然后再对后面的路径进行一次规则匹配,因为没有其它路径了,所以应用的是$plainPathRoute1路由规则。

第二种情况:访问gonefish.users.example.com/profile。首先,路由系统先匹配gonefish.users.example.com域名,找到了控制名和动作名;然后再对路径profile进行一次规则匹配,这样更新了动作名,即$plainPathRoute2的路由规则。

通过对访问地址进行两次路由规则的匹配来映射最终访问的方法。