Динамическая загрузка модулей ZF2Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Динамическая загрузка модулей ZF2

Сообщение Anonymous »

У меня есть файл application.config

Код: Выделить всё

return array(
'modules' => array(

'Application',
'ErrorHandler'
),
'module_listener_options' => array(
'module_paths' => array(
'./module',
'./vendor'
),
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php'
)
)
);
и в Application/Module.php у меня есть (несколько функций):

Код: Выделить всё

    public function onBootstrap(MvcEvent $e)
{
$eventManager        = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);

$this->initModules($e);
}

public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}

public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}

private function getModules(MvcEvent $e) {
$sm = $e->getApplication()->getServiceManager();
$moduleTable = $sm->get('ModuleTable');

$modules = array();

foreach ($moduleTable->fetchAll() as $m) {
$modules[] = $m;
}

return $modules;
}

private function initModules(MvcEvent $e) {
$modules = $this->getModules($e);

$serviceManager = $e->getApplication()->getServiceManager();
$moduleManager = $serviceManager->get('ModuleManager');

$loadedModules = $moduleManager->getLoadedModules();

foreach ($loadedModules as $module) {
$this->loadedModules[] = str_replace('\Module', '', get_class($module));
}

foreach ($modules as $module) {
try {
$moduleManager->loadModule($module->getName());
$this->loadedModules[] = $module->getName();
} catch (\Exception $e) {
$this->failedModules[] = $module->getName();
}
}

if (count($this->failedModules) > 0) {
// Error in loading modules
exit;
}

return $this;
}

public function getServiceConfig()
{
return array(
'factories' => array(
'ModuleTable' =>  function($sm) {
return new ModuleTable($sm->get('Zend\Db\Adapter\Adapter'));
},
),
);
}
Я пытаюсь добиться динамической загрузки модулей на основе настроек из базы данных.

я не получаю ошибок при загрузке модулей... когда пытаюсь вызвать $moduleManager->getLoadedModules(); я вижу, что модуль находится в списке загруженных, но его конфигурация и функциональность не работают. В частности, у меня есть маршруты в этом модуле, и при попытке доступа к ним я получаю 404. но если я включаю модуль в файл application.config, все работает идеально.

Возможно достичь ? Если да, какие-либо рекомендации?

Спасибо

ОБНОВЛЕНИЕ

Мне удалось динамически загружать модули в методе Module::init()... но безуспешно получить доступ к ServiceManager и/или доступу к базе данных для загрузки списка модулей из базы данных...

Подробнее здесь: https://stackoverflow.com/questions/278 ... f2-modules
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»