Требуется немного работы, но это выполнимо. Я не уверен, насколько мой подход соответствует строжайшему определению мультитенантности, но в случае, если он дает вам некоторые идеи:
У меня есть одна установка моего приложения, которая в основном соответствует рекомендуемой структуре проекта (http://framework.zend.com/manual/en/project-structure.project.html). У меня тогда есть одно приложение ZF на сайт, использующее приложение. Каждое из них содержит символическую ссылку на основное приложение (в настоящее время находится в папка библиотеки, хотя это может измениться. Каждый из приложений сайта использует класс начальной загрузки основного приложения, но у них есть свои собственные файлы конфигурации.
Приложение включает в себя большое количество модулей, каждый из которых может включаться или не включаться на каждом сайте. У меня есть метод _initModules () в начальной загрузке, который запрашивает базу данных, чтобы определить, какие модули должны быть включены. Затем они загружаются обычным способом.
Можно добавить дополнительные пути просмотра (которые проверяются по порядку) в Zend_View, поэтому сайт добавляет свой собственный путь просмотра в стек. Таким образом, сайты могут легко переопределять представления, которые находятся в основном приложении. Также было бы возможно добавить каталог модели сайта для include_path, что позволило бы сайтам переопределять модели приложений, хотя я пока не нашел в этом необходимости (и, вероятно, это повлияет на производительность).