2010-11-04 3 views
6

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

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

public/admin/index/index 

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

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

Я хотел бы использовать такого рода URLs:

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')); 

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

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

+1

Вы должны сделать это наоборот. Поместите AdminController в каждый модуль. Это сохраняет всю логику модуля в одном месте, а не во многих. Вероятно, вы могли бы добавить подмодули, но вам, вероятно, придется переписать много существующих фреймворков для этого, поскольку это не выполняется намерением. – Fge

+0

Не могли бы вы объяснить это немного больше? Я думаю, что я не совсем понимаю, как это будет переводиться, но мне нравится звук этого ... –

ответ

11

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

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

  • Галерея Модуль
    • ImageController (viewAction, browseAction, ...)
    • AdminController (editImage, uploadImage, ...)
    • ...
  • Модуль пользователя
    • SettingsController
    • AdminController
    • ...

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

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

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

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

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

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

+0

Спасибо за объяснение! Думаю, я понимаю и буду смотреть на это в ближайшие несколько дней. Благодаря! –

+0

Еще один кудо. Хорошее объяснение и продуманные рассуждения. Направьте меня в правильном направлении. Благодарю. – Fatmuemoo

+0

hmm. Как вы выведете несколько модулей на одной странице? что-то вроде виджетов? Это возможно? Я знаю, что могу использовать помощник вида действия - но это AFAIK вызовет весь цикл отправки - правильно? – Stann

0

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

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