내가 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'
)
)
);
다음하고 응용 프로그램에/Module.php 내가 (기능의 몇 가지)가 ZF2 모듈을로드 :
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
는 동적으로 모듈 : 초기화() 메소드 내에서로드 된 모듈을 얻을 수 있었다 ...하지만, 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은 기술적으로 서비스에서 사용할 수 있으므로 DB에 액세스 할 수 있도록 클로저 대신 조건 계산자로 밀어 넣을 수 있습니다. – Saeven
행운이 있나요? –