Пространство имен / Префикс контроллера в модуле по умолчанию
В моем приложении 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 ответа
Как вы заметили, имена контроллеров в модуле по умолчанию не требуют префикса (например: SomeController
), в то время как контроллеры в модулях не по умолчанию требуют префикса (например: Admin_SomeController
).
В приложении, основанном на модулях, я лично считаю более подходящим префикс всех контроллеров с именем модуля. Это было подано как проблема и исправлено, по- видимому, в версии 1.5, добавив настройку фронт-контроллера prefixDefaultModule
,
Итак, в application/configs/application.ini
Вы можете добавить:
resources.frontController.prefixDefaultModule = true
Я использую это все время и думаю, что это здорово.;-)
Смотрите документацию ZF: Диспетчер
Начиная с версии 1.5.0, вы можете сделать это, указав prefixDefaultModule как TRUE либо во фронт-контроллере, либо в вашем диспетчере:
Вы можете установить его в своем application.ini...
resources.frontController.prefixDefaultModule = true
.. или откуда-либо еще с:
Zend_Controller_Front::getInstance()->setParam('prefixDefaultModule', true);