我有以下application.config動態加載模塊ZF2
return array(
'modules' => array(
'Application',
'ErrorHandler'
),
'module_listener_options' => array(
'module_paths' => array(
'./module',
'./vendor'
),
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php'
)
)
);
,並在應用程序/ 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中,所有工作都是完美的。
可能實現?如果是有任何指導方針
由於
UPDATE
我設法模塊:: init()方法內動態加載的模塊...但沒有任何成功訪問的ServiceManager和/或DB訪問來加載從分貝模塊列表...
看看https://github.com/weierophinney/zf2-documentation/blob/71aac39e9ae78eaca3739458c5a2ccf15f4cdb2c/docs/languages/en/tutorials/config.advanced.rst。 操縱合併配置部分可以幫助您與您的問題 – cptnk
我操縱一個小包裹,增加了條件,以模塊加載,我尚未大功告成:https://packagist.org/packages/saeven/zf2-dynamic -modules SL在技術上可用於服務,所以我可以將它推入條件評估程序而不是關閉程序,以便您訪問數據庫。 – Saeven
這有什麼好運?我被困在相同的問題 –