Добрый день.
Передо мной встала задача разработки некоторого сайта, "под крылом" которого должен быть доступен
разнородный функционал, который, к тому же, будет постоянно расширяться в смысле добавления
принципиально новых разделов (возможно, разными людьми). Т.е. расширение функционала должно быть с самого начала предусмотрено, чтобы последующие интеграции новых частей приложения были максимально автоматическими.
Для краткости этот
разнородный функционал я буду называть модулями (хотя не уверен, подходящее ли это слово).
Хочу подчеркнуть, что под модулем подразумевается не просто некий полезный функционал, не какая-то новая библиотека, а набор программных средств и данных, позволяющих отобразить какую-то информацию на сайте "от и до", т.е. каждый модуль должен иметь контроллер, свойственные ему модели, классы для работы с БД, представления и, что немаловажно, программный код клиентской части приложения (при этом всё это должно соответствовать интерфейсам, общим для всего приложения).
Решение этой задачи я представляю себе следующим образом (тезисно):
- Приложение должно состоять из CMS и расширений-модулей. (На самом деле я не уверен, действительно ли это будет CMS в полном смысле слова, но я буду использовать именно этот термин.)
- В CMS должны быть заложены возможности экспорта-импорта модулей.
- Модули должны быть независимы друг от друга, но зависимы от фреймворка и связанной с ним кодовой базы (т.е. не должны изобретать свои велосипеды, а использовать общую кодовую базу приложения).
- Модули и CMS должны иметь общую систему авторизации, но отдельные системы пользовательских ролей.
Кроме того, для управления этой системой:
- CMS должна иметь свою администраторскую панель, через которую можно было бы управлять вещами, относящимися ко всей CMS.
- Модуль должен иметь свою администраторскую панель, интегрированную в админку CMS.
Также, вероятнее всего, потребуется обеспечить к этим модулям доступ через различные субдомены в виде "foo-module.site.com/bar-action-of-foo-module"
Нечто подобное (в ОЧЕНЬ первом приближении) я видел в CMS Joomla!, однако в ней всё-таки больше CMS-ности, а мне нужно в разы меньше (я не стремлюсь создать "ещё одну CMS" для пользователей, а хочу сделать свою работу немного проще за счёт разнесения общего и частного функционалов по разным корзинам). В Joomla! ближайшим аналогом моего "модуля" является "компонент", в котором (как и во всей Joomla!) реализован паттерн HMVC, о деталях "хорошей" реализации которого я не нашел ничего кроме красивых блок-схем, нарисованных пользователями той же Joomla!.
В общем, выше изложен большой набор хотелок, а вот вопросы:
- Какой существующий PHP-фреймворк наиболее подходит для написания этой CMS? Я сейчас смотрю в сторону Symfony2 и Yii2: заложена ли в них возможность использовать паттерн HMVC, или может в этом не будет необходимости?
- Если вдруг что-то из сказанного мною выше приводит вас в недоумение - я буду рад услышать критику касаемо постановки задачи или предлагаемых мною решений.
- Если вы знаете какие-то хорошие подходы для решения указанных выше задач - я буду очень рад услышать их.
UPD: Я задаю вопрос "какой фреймворк использовать" потому, что не знаю преимуществ существующих фреймворков для решения описанных задач. Поэтому, если вам не трудно, кроме собственно названия фреймворка укажите причины, по которым, по вашему мнению, данный фреймворк
наиболее подходит (по сравнению с другими фреймворками)
для решения описанных выше задач. Спасибо за понимание.