Модули Zend в модулях - PullRequest
       3

Модули Zend в модулях

6 голосов
/ 04 ноября 2010

Мне интересно, возможно ли создать модульную структуру в модуле (или что-то подобное)

В настоящее время я использую модуль администратора, используя URL-адреса, как это:

public/admin/index/index

с такой структурой папок:

applications
-- modules
---- admin
------ controllers
------ views [and so on]

Я хотел бы использовать такие URL:

public/admin/news/index/index
public/admin/gallery/index/index

Где новости и галерея являются модулями

Структура папок будет выглядеть так

applications
-- modules
---- admin
------ controllers
------ views
-------- scripts
---------- modules
------------ news
-------------- controllers
-------------- views [and so on]
------------ gallery
-------------- controllers
-------------- views [and so on]

Возможно ли это? Я попытался добавить еще один модуль в мой загрузчик:

$moduleLoader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Module',
            'basePath' => APPLICATION_PATH . '/modules/admin/views/scripts/modules'));

Но это не сработало. Я мог бы создавать новости, галерею и такие модули и загружать их в свой макет администратора. Все будет в том же стиле и меню, что и у остальных администраторов, но я бы предпочел увидеть это по-своему (если это возможно)

Если я хочу что-то совершенно не обсуждаемое или у меня есть советы, идеи, пожалуйста, дайте мне знать.

Ответы [ 2 ]

11 голосов
/ 05 ноября 2010

Модуль - это набор логически связанных функций (например, галерея). Для простоты вы должны хранить весь связанный код для модуля в его каталоге (это также включает любые задачи администратора). В вашем adminModule у вас есть код нескольких других модулей, что затрудняет повторное использование обоих модулей, поскольку все они зависят от AdminModule, а AdminModule зависит от всех других модулей. Это полностью нарушает идею модулей. Если это помогает понять, вы можете видеть контроллеры как подмодули (я знаю, что это неправильно, но, возможно, это облегчает понимание).

Итак, сначала вы могли бы сделать что-то вроде этого:

  • Модуль Галерея
    • ImageController (viewAction, browseAction, ...)
    • AdminController (editImage, uploadImage, ...)
    • ...
  • Пользовательский модуль
    • SettingsController
    • AdminController
    • ...

Но снова вы разделяете код для одной сущности на разные контроллеры. Как и в ImageController, вы управляете просмотром изображений, но редактирование и загрузка выполняется в AdminController.
Итак (по крайней мере, так я это делаю):

  • Модуль Галерея
    • ImageController (viewAction, addAction, editAction, deleteAction, ...)
    • GalleryContoller (viewAction, addAction, editAction, deleteAction, ...)
    • ....

Это объединяет все вещи, которые логически принадлежат друг другу. Один контроллер отвечает за все действия для одного объекта (например, ImageController для всех действий, связанных с one image, GalleryController для действий, связанных с галереями). Сюда также входят административные задачи.
Если вы делаете это таким образом, то, вероятно, нет реального AdminModule. Это была бы только какая-то навигация, связанная с административными действиями каждого модуля / контроллера.

Вы уверены, что можете переписать zf для поддержки подмодулей. Это будет включать:

  • Добавление маршрута с поддержкой подмодулей (простой)
  • Переписать Диспетчер для поддержки подмодулей
  • Переписать автозагрузчик для подмодулей
  • Добавление нескольких других каталогов в Plugin-Loaders & others

Но это не делается с какой-либо средой mvc, которую я когда-либо видел, поскольку это обычно подразумевает слабость дизайна (опять же, по моему мнению) и общую потерю производительности (чем больше каталогов для поиска автозагрузчика, тем хуже ).

0 голосов
/ 05 ноября 2010

Структура каталогов ZF настраивается, в основном:

  • опции фронтального контроллера (например, setControllerDirectory(), addPluginPath() и т. Д.)
  • просмотр параметров (addPath(), addHelperPath()
  • автозагрузчики, например _resourceLoader в модуле начальной загрузки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...