public function applyConfiguration($config, $withinService = false)
{
if ($config->getIsEmpty()) {
return;
}
// set path aliases and using namespaces
foreach ($config->getAliases() as $alias => $path) {
Prado::setPathOfAlias($alias, $path);
}
foreach ($config->getUsings() as $using) {
Prado::using($using);
}
// set application properties
if (!$withinService) {
foreach ($config->getProperties() as $name => $value) {
$this->setSubProperty($name, $value);
}
}
if (empty($this->_services)) {
$this->_services = array($this->getPageServiceID() => array('Prado\\Web\\Services\\TPageService', array(), null));
}
// load parameters
foreach ($config->getParameters() as $id => $parameter) {
if (is_array($parameter)) {
$component = Prado::createComponent($parameter[0]);
foreach ($parameter[1] as $name => $value) {
$component->setSubProperty($name, $value);
}
$this->_parameters->add($id, $component);
} else {
$this->_parameters->add($id, $parameter);
}
}
// load and init modules specified in app config
$modules = array();
foreach ($config->getModules() as $id => $moduleConfig) {
if (!is_string($id)) {
$id = '_module' . count($this->_lazyModules);
}
$this->_lazyModules[$id] = $moduleConfig;
if ($module = $this->internalLoadModule($id)) {
$modules[] = $module;
}
}
foreach ($modules as $module) {
$module[0]->init($module[1]);
}
// load service
foreach ($config->getServices() as $serviceID => $serviceConfig) {
$this->_services[$serviceID] = $serviceConfig;
}
// external configurations
foreach ($config->getExternalConfigurations() as $filePath => $condition) {
if ($condition !== true) {
$condition = $this->evaluateExpression($condition);
}
if ($condition) {
if (($path = Prado::getPathOfNamespace($filePath, $this->getConfigurationFileExt())) === null || !is_file($path)) {
throw new TConfigurationException('application_includefile_invalid', $filePath);
}
$cn = $this->getApplicationConfigurationClass();
$c = new $cn();
$c->loadFromFile($path);
$this->applyConfiguration($c, $withinService);
}
}
}