Zend Framework поддерживает модули, однако реализация этой поддержки на момент написания статьи немного не полноценна, не всё работает на автомате и приходится кое-что доводить руками. Даже рекомендованная структура директорий для модульного приложения в разных местах официальной документации различается. Из неприятных особенностей можно отметить то, что не подключаются автоматически layout-ы для модуля, если их прописать в конфигурационном файле. Точнее он может и подключиться при определенных условиях, но будет применяться уже ко всему проекту, а не к конкретному модулю. И плюс к этому конфигурацию и ресурсы для модуля разработчики фреймворка предлагают прописывать в основной файл конфигурации application.ini
в виде:
modulename.resources.foo = "bar"
Соответственно задача стоит следующая:
- Сделать возможность автоматически подгружать конфигурационные файлы и layout-ы модуля при их наличии из директории модуля. Это более соответствует концепции модульной структуры – всё, что нужно для модуля, должно храниться в директории модуля. За исключением индивидуального веб-контента (изображения, CSS и JS файлы, пиктограмки, и т.п.), который должен храниться в директории, доступной из веб. Весь этот контент тоже лучше хранить в отдельной поддиректории для данного модуля. Это значительно упрощает установку и удаление модуля простым копированием или удалением нужных директорий, без необходимости что-то дополнительно копировать в основную структуру проекта либо редактировать основной конфигурационный файл проекта.
- Инициализировать объект
$view
специфичными для модуля параметрами, прописанными в конфигурационном файле модуля, или в случае их отсутствия – параметрами по умолчанию. - Сделать всё это максимально просто, прозрачно и гибко. По возможности не меняя структуру проекта, не меняя код проекта, с возможностью поддержки различной структуры организации директорий модулей.
Погуглив и почитав, что в этой области уже было наработано, я не нашел единого готового красивого решения и разработал свое, скомпилировав, дополнив, исправив и подогнав под требуемые цели все идеи, которые видел.
Весь материал логично разделить на несколько частей:
- Zend Framework – Объединение конфигов с поддержкой модулей
- Zend Framework – Инициализация основных параметров view и layout для модуля
- Zend Framework – Пример организации модульной структуры проекта
Заключение
Весь представленный код и его фрагменты можно использовать без каких либо ограничений.
При публикации данных статей или их фрагментов ссылка на источник (сайт https://konovaltsev.ru/) обязательна.