ZF控制器的htaccess文件怎么写这里就写一个Apache的例子:

<IfModule mod_rewrite.c>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteRule ^(.*)$ index.php/$1 [QSA,L]

</IfModule>

设置类自动加载


在老版的ZendFramework里,可以像下面这样设置自动加载:


function __autoload($class)

{

    Zend_Loader::loadClass($class);

}


新版的ZendFramework已经不能这么干了,而应该使用下面的方法:


Zend_Loader::registerAutoload();


顺便说点别的,通常设置类自动加载都是直接用__autoload,但一般这不是好习惯,因为我们的应用里可能会包含很多第三方类库,在这些类库里很有可能已经使用了__autoload,如果再使用__autoload必然会引起冲突。设置类自动加载更好的方法是使用spl_autoload_register


数据库表前缀


缺省情况下,Zend_Db_Table没有设置类似表前缀的方法。似乎说法是数据库本身的schema功能和表前缀功能重复。不过老实说,schema功能并不是所有的数据库都的,所以说表前缀功能还是需要的,但是只能自己编码实现了。


Zend_Db_Table_Row的若干个钩子方法


主要有_insert(),_postInsert(),_update(),_postUpdate(),_delete(),_postDelete(),利用钩子方法可以实现很多奇妙的功能,比如CakePHP中的Behavior功能就主要是利用钩子方法实现的。


Zend_Db_Table_Row中的对象属性


缺省情况下,表里有什么字段,Row对象就有什么属性,比如articles表有一个category_id字段,那么就有$article->category_id,如果你想使用骆驼样式($article->categoryId)的命名方式,可以通过重定义_transformColumn方法来实现。


部分功能缺失


现在的ZendFramework似乎还没有内建的UnitTest支持。此外,Ajax功能也没有。


Zend_Db_Table的find方法


Zend_Db_Table的find方法返回的是Zend_Db_Table_Rowset而不是Zend_Db_Table_Row。

如果想得到Row而不是Rowset,要这么调用的$table->find(123)->current();,这让人多少有些不舒服。


Zend_Db_Table中的表关系


当你利用Zend_Db_Table中的表关系去写代码的时候,很可能会写出类似下面的代码:


$accountsTable = new Accounts();

$accountsRowset = $accountsTable->find(1234);

$user1234 = $accountsRowset->current();


// 第一种方法

$bugsReportedByUser = $user1234->findDependentRowset('Bugs');

$bugsAssignedToUser = $user1234->findDependentRowset('Bugs', 'Engineer');


这样的代码可以说中规中矩,但是我推荐你还是使用类似下面的代码:


// 第二种方法

$bugsReportedByUser = $user1234->findBugs();

$bugsAssignedToUser = $user1234->findBugsByEngineer();


为什么这么说的?因为在第一种方法中,方法名findDependentRowset包含了Rowset字样,技术味道过重,而第二种方法中就没有这个问题,findBugs和findBugsByEngineer都是很有DSL感觉的好名字。

Zend_Controller中的Module功能


ZF的Module功能和CakePHP的Plugin作用类似,功能稍逊。大致有两种使用方法:


第一种:

$frontController->setControllerDirectory(array(

    'default' => 'application/modules/default/controllers',

    'article' => 'application/modules/article/controllers'

));


第二种:

$frontController->addModuleDirectory('application/modules');


当然,后一种方法更简单好用一些。


修改模板文件的扩展名


缺省状态下,模板文件的扩展名是phtml。如果你想修改它,很可能会落入ZF的陷阱,因为Zend_Controller_Action有一个viewSuffix属性,所以最先想到的修改方法很可能是:


$this->viewSuffix = 'tpl';


可惜你试试就会发现没有效果,正确的修改方法是这样的:


$this->_helper->viewRenderer->setViewSuffix('tpl');