开发者

Namespace / Prefix of Controller in Default Module

开发者 https://www.devze.com 2023-03-13 10:12 出处:网络
In my zf application I have 3 modules: applicant company admin And, in my application.ini I\'ve picked a default module

In my zf application I have 3 modules:

  • applicant
  • company
  • admin

And, in my application.ini I've picked a default module

resources.frontController.defaultModule = "applicant"

So, some of controllers classes are named like:

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

Since applicant is my default module, I don't need to use module name as prefix in class name.

How can I use the prefixed way to name classes in my default module?

I want to use these class names

class Applicant_IndexController extends Zend_Controller_Action
class Company_IndexController extends Zend_Controller_Action
clas开发者_高级运维s Admin_IndexController extends Zend_Controller_Action

but I'm getting this error:

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


As you note, controller names in the default module do not require prefixing (Ex: SomeController), while controllers in non-default modules require prefixing (Ex: Admin_SomeController).

In module-based app, I personally find it more consistent to prefix all controllers with the module name. This was filed as an issue and fixed in apparently in version 1.5 by adding a front controller setting prefixDefaultModule.

So, in application/configs/application.ini, you could add:

resources.frontController.prefixDefaultModule = true

I use it all the time and think it's great. ;-)


See the ZF Documentation: 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:

You can set it in your application.ini ...

resources.frontController.prefixDefaultModule = true

.. or from anywhere else with:

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

精彩评论

暂无评论...
验证码 换一张
取 消