Пространство имен / Префикс контроллера в модуле по умолчанию - PullRequest
4 голосов
/ 15 июня 2011

В моем приложении ZF у меня есть 3 модуля:

  • заявитель
  • компания
  • админ

И в моем application.ini я выбрал модуль по умолчанию

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

Ответы [ 2 ]

5 голосов
/ 16 июня 2011

Как вы заметили, имена контроллеров в модуле по умолчанию не требуют префикса (например: SomeController), в то время как контроллеры в модулях не по умолчанию требуют префикса (например: Admin_SomeController).

В модульном приложении я лично считаю более подходящим префикс всех контроллеров с именем модуля. Это было зарегистрировано как проблема и исправлено в , по-видимому, в версии 1.5 путем добавления настройки фронтального контроллера prefixDefaultModule.

Итак, в application/configs/application.ini вы можете добавить:

resources.frontController.prefixDefaultModule = true

Я использую это все время и думаю, что это здорово. ; -)

2 голосов
/ 16 июня 2011

См. Документацию ZF: Диспетчер

Начиная с версии 1.5.0, вы можете теперь сделать это, указав prefixDefaultModule как TRUE либо в фронт-контроллере, либо в вашем диспетчере:

Вы можете установить его в своем application.ini ...

resources.frontController.prefixDefaultModule = true

.. или из любого другого места с помощью:

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