Я использую Zend Framework в огромном интранет-сайте, так как он на ранних стадиях, 0,3 или 0,4, я думаю, и я следовал большинству решений относительно ваших вопросов. Я попытаюсь объяснить их немного:
В большинстве случаев вам не нужно использовать модули. Вы можете поместить все свои контроллеры в каталог application/default
, назвать их IndexController
или HelpController
и все готово, просто получите доступ к http://www.domain.com/
или http://www.domain.com/help
.
Если ваш проект начинает расти, вы можете добавлять модули по своему желанию, добавляя к ним префикс с именем модуля (имя каталога) Admin_IndexController
или Forum_PostController
, заменяя их на http://www.domain.com/admin
(вы находитесь в admin
модуль, index
контроллер; не в default
модуль / admin
контроллер).
Например, вы можете установить каталог модулей на applicatoin/modules
и настроить FrontController для поиска в этом каталоге модулей. Использование addModuleDictory Всякий раз, когда вы создаете новый каталог и помещаете туда свои контроллеры / представления, они автоматически обнаруживаются диспетчером. Здесь является примером.
Как я вижу, они служат явно различным целям. ViewHelpers используются для генерации разметки и визуализации других действий непосредственно в представлении, создания абстрагируемого меню, боковой панели и т. Д. OTOH ActionHelpers взаимодействует с процессом диспетчеризации, позволяя вам перенаправить, например, другое действие.
Просмотры
В начале я тоже чувствовал себя немного неловко, но привык. Я думаю, что главная причина не в том, чтобы загрязнять пространство имен, но я могу ошибаться. Кстати, я не очень люблю использовать extract()
, но это всего лишь мои личные предпочтения.
По главной причине того, что в одном файле нельзя использовать более одного контроллера: автозагрузка. Когда вы используете $this->someViewHelper()
, базовый движок ищет класс с именем *_SomeViewHelper_Helper
в ваших путях плагинов. Другая причина заключается в том, что статические классы очень сложны для модульного тестирования. Есть даже предложение переписать FrontController как экземплярный класс, а не как Singleton.
Вы правы в отношении слишком сложной части, о которой говорите во втором абзаце, и разработчики и сообщество знают об этом. Просто так должно быть, чтобы учесть все требования и варианты.
В конце я думаю, что ZF - это очень надежная структура, дающая нам свободу делать то, что мы хотим.
Я надеюсь, что смогу помочь вам разобраться с вашими вопросами.