使用传统的模块目录结构简介传统的模块目录结构允许你把不同的MVC应用程序分离成为独立的单元,并和不同的前端控制器配合再使用。示例一下这样的目录结构:
docroot/
index.php
application/
default/
controllers/
IndexController.php
FooController.php
models/
views/
scripts/
index/
foo/
helpers/
filters/
blog/
controllers/
IndexController.php
models/
views/
scripts/
index/
helpers/
filters/
news/
controllers/
IndexController.php
ListController.php
models/
views/
views/
scripts/
index/
list/
helpers/
filters/
在这个范例中,模块名作为它所包含的控制器的前缀。上面的例子包含三个模块控制器:'Blog_IndexController' 'News_IndexController' 和'News_ListController'。也定义了两个全局控制器:'IndexController' 和 'FooController'。它们都将不需要命名空间前缀。这个目录结构在本章中用作为例子。
那么,你怎样用Zend Framework MVC组件来实现这样的目录结构? 指定模块控制器目录
利用模块的第一步是来修改你如何在前端控制器指定控制器目录列表。在基本的MVC系列,传递数组或字符串给
用
$front->setControllerDirectory(array(
'default' => '/path/to/application/controllers',
'blog' => '/path/to/application/blog/controllers'
));
$front->addControllerDirectory('/path/to/application/news/controllers',
'news');
把最好的保留到最后,指定模块的最容易的方法是整体来做,把所有模块放到一个通用的目录并使用相同的结构。这可以用
/**
* Assuming the following directory structure:
* application/
* modules/
* default/
* controllers/
* foo/
* controllers/
* bar/
* controllers/
*/
$front->addModuleDirectory('/path/to/application/modules');
上面的例子将定义
你可以在模块中通过
/**
* Change the controllers subdirectory to be 'con'
* application/
* modules/
* default/
* con/
* foo/
* con/
* bar/
* con/
*/
$front->setModuleControllerDirectoryName('con');
$front->addModuleDirectory('/path/to/application/modules');
Routing to modules
在
换句话说,它将自己或通过先前的模块来匹配控制器和动作。匹配规则指定一个模块将只匹配在传递给前端控制器和派遣器的控制器目录数组中存在同名的键。 模块或全局缺省控制器
在缺省的路由器中,如果在URL中没有指定控制器,缺省控制器就被使用(
如果你总愿意缺省到全局命名空间,在前端控制器中设置
$front->setParam('useDefaultControllerAlways', true);
|