Я недавно рассматривал ту же проблему в своем агентстве, и решение, которое я сейчас тестирую, включает следующую структуру папок приложения:
app/
default/
controllers/
models, etc
ecommerce/
controllers/
models, etc
lib/
S24/
ComponentCode.php
modules/
ecommerce/
admin/
controllers/
models, etc
default/
controllers/
models, etc
data, public web, temp, other ZF folders
Идея заключается в том, что общий код компонента хранится в lib
, модульное приложение хранится в modules
, а код сайта отдельного клиента хранится в app
.
Папки lib/S24
и modules/ecommerce
будут общими и одинаковыми для каждого проекта (мы SVN выводим эти папки наружу).
app
- это каталог модулей, поэтому папки default
и ecommerce
создают модули в ZF. app/default
для контроллеров по умолчанию (т.е. без модуля). app/ecommerce
будет содержать набор контроллеров, которые просто расширяют контроллеры в пределах modules/ecommerce/default/controllers
.
Затем вы можете расширить функциональность в app/ecommerce/controllers
, если хотите, или добавить новую функциональность.
Поскольку мы хотим, чтобы система администрирования модуля оставалась неизменной, а также поддерживала несколько систем администрирования (по URL-адресам, таким как www.domain.com/admin/ecommerce и www.domain.com/admin/user), мы обслуживаем модульную систему администрирования прямо из папки modules
. Любые пользовательские страницы администратора могут быть добавлены к app/admin/controllers
.
// Add Controller folder
$front->addControllerDirectory('/path/to/modules/ecommerce/admin/controllers', 'ecommerceAdmin');
// Add route
$router->addRoute(
'ecommerceAdmin',
new Zend_Controller_Router_Route('admin/ecommerce/:controller/:action',
array('module' => 'ecommerceAdmin',
'controller' => 'index',
'action' => 'index'))
);
Как я уже сказал, я сейчас тестирую это, но надеюсь, что это даст некоторые идеи для вашей собственной системы. Как только я получу это полностью стабильным, я надеюсь написать статью в блоге на эту тему.