Динамический модуль по умолчанию в Zend Framework - PullRequest
7 голосов
/ 18 мая 2009

Кто-нибудь знает, как динамически устанавливать модуль по умолчанию в Zend Framework и не сталкиваться с проблемами пространства имен? Например, я хочу иметь таблицу модулей, которые можно загружать, причем один из них установлен в качестве модуля по умолчанию. Например, я могу иметь:

admin
blog
calendar

как модули, которые могут быть загружены. Если в качестве модуля по умолчанию используется «блог», то для «администратора» и «календаря» должно быть пространство имен их контроллеров (Admin_IndexController, Calendar_IndexController), а для «блога» нет (IndexController).

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

Как ты справляешься с этим? В настоящее время я использую следующий код:

$modules = new Modules();
$activeModules = $modules->fetchActive();
foreach($activeModules as $mod) {
    $loadedModules[$mod->name] = '..application/modules/' . $mod->name . '/controllers';
    if($mod->default) {
        $defaultModule = $mod->name;
    }
}
$frontController->setControllerDirectory($loadedModules);
$frontController->setDefaultModule($defaultModule);

Ответы [ 4 ]

6 голосов
/ 18 мая 2009

Если вы планируете изменить модуль по умолчанию, лучше всего указать пространство имен ALL modules, а затем указать, что к модулю по умолчанию должен быть добавлен префикс:

Сначала измените модуль "блог", чтобы использовать пространство имен:

<?php

// Used to be "class IndexController"
class Blog_IndexController extends Zend_Controller_Action {

}

Затем вызовите setParam для опции prefixDefaultModule в вашем экземпляре Zend_Controller_Front:

<?php

    // Allow your default module to be prefixed
    $frontController->setParam('prefixDefaultModule', true);

См. ошибка # 1831 для объяснения.

4 голосов
/ 19 мая 2010

используйте application.ini: resources.frontController.prefixDefaultModule = true resources.frontController.defaultModule = default

1 голос
/ 18 мая 2009

Вы можете сделать модуль по умолчанию фактически решающей частью всего этого процесса. Более конкретно - отправьте все запросы на модуль по умолчанию классу, который затем определит, какой конкретный модуль в настоящее время является модулем по умолчанию, и перенаправит запрос на него.

По крайней мере, так мы это реализовали;)

0 голосов
/ 19 мая 2009

Похоже на работу плагина контроллера preDispatch.

Вы можете изменить запрос на изменение модуля на основе определенного запроса или идентификатора / сеанса / известных данных для пересылки или перенаправления по требованию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...