2011-06-15 98 views
4

以我ZF应用我有3个模块:命名空间控制器/前缀在默认模块

  • 申请人
  • 公司
  • 管理员

而且,在我的application.ini I”已经选择了默认模块

resources.frontController.defaultModule = "applicant" 

因此,一些控制器类被命名为喜欢:

class IndexController extends Zend_Controller_Action /* in Applicant Module */ 
class Company_IndexController extends Zend_Controller_Action 
class Admin_IndexController extends Zend_Controller_Action 

由于申请人是我的默认模块,我并不需要使用模块名作为类名前缀。

如何使用前缀方式在默认模块中命名类?

我想用这些类名

class Applicant_IndexController extends Zend_Controller_Action 
class Company_IndexController extends Zend_Controller_Action 
class Admin_IndexController extends Zend_Controller_Action 

,但我得到这个错误:

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in ZendFramework-1.11.6/library/Zend/Controller/Dispatcher/Standard.php on line 248 

回答

5

正如您注意,控制器名称默认模块中不需要的前缀(例如:SomeController),而在非默认模块控制器需要前缀(例如:Admin_SomeController)。

在基于模块的应用程序中,我个人发现它更加一致,前缀所有控制器与模块名称。这被提交为an issue并且通过添加前控制器设置prefixDefaultModule固定在apparently in version 1.5中。

所以,在application/configs/application.ini,您可以添加:

resources.frontController.prefixDefaultModule = true

我用它所有的时间,并认为这是伟大的。 ;-)

+0

D'oh! @本杰明克雷默击败了我。他应该得到接受。 – 2011-06-16 08:38:48

+0

当我尝试这样做时,我得到错误:致命错误:在M:\ Zend_Framework \ library \ Zend \ Application \ Bootstrap \ Bootstrap.php在线的未捕获的异常'Zend_Application_Bootstrap_Exception'带有消息'没有使用前端控制器注册的默认控制器目录' 91 - 有什么想法? – Sjwdavies 2012-02-17 13:13:59

+0

刚刚意识到,在您的示例中它是'frontcontroller',应该是'frontController',大写'C'... – Sjwdavies 2012-02-17 13:19:11

2

见ZF文档:The Dispatcher

As of 1.5.0, you can now do so by specifying the prefixDefaultModule as TRUE in either the front controller or your dispatcher:

您可以设置它在你的application.ini中...

resources.frontController.prefixDefaultModule = true 

..或者从其他地方有:

Zend_Controller_Front::getInstance()->setParam('prefixDefaultModule', true);