public function load(Config $config) { $this->resourceMap = CacheManager::loadResource(self::CONTEXT_RESOURCE_NAME, CacheManager::APPLICATION_SCOPE); if ($this->resourceMap == null) { ApplicationInitializer::loadAssets(ASSETS_DIRECTORY); $this->resourceMap = $this->loadResourceMap($this->getClasses()); CacheManager::saveResource(self::CONTEXT_RESOURCE_NAME, $this->resourceMap, CacheManager::APPLICATION_SCOPE); } $this->createResources(); $this->loadDataSources($config->getDataSources()); return new ApplicationContext($this->resources); }
/** * Create a new Picon Application * Fires off the application initialiser to load an instantiat all resources * Despite not being private, like a normal singleton, it is not * expected for a Picon Application to be instantiated more than once */ public function __construct() { if (isset($GLOBALS[self::GLOBAL_APPLICATION_KEY])) { throw new \IllegalStateException("An instance of picon application already exists"); } $GLOBALS[self::GLOBAL_APPLICATION_KEY] = $this; $this->initialiser = $this->getApplicationInitializer(); $this->initialiser->addScannedDirectory(PICON_DIRECTORY, 'picon'); $this->initialiser->addScannedDirectory(PICON_DIRECTORY . "/annotations"); $this->initialiser->addScannedDirectory(PICON_DIRECTORY . "/web/annotations"); $this->initialiser->addScannedDirectory(PICON_DIRECTORY . "/exceptions"); $this->initialiser->addScannedDirectory(PICON_DIRECTORY . "/web/pages"); $this->initialiser->addScannedDirectory(ASSETS_DIRECTORY); $this->internalInit(); $this->initialiser->initialise(); ob_start(); }
private function scanPages() { ApplicationInitializer::loadAssets(ASSETS_DIRECTORY); $this->pages = array(); $scanner = new ClassScanner(array(new SubClassRule('\\picon\\WebPage'))); $pages = $scanner->scanForName(); foreach ($pages as $pageName) { $this->addToPath($pageName, $pageName); } $pathScanner = new ClassScanner(array(new AnnotationRule('Path'))); foreach ($pathScanner->scanForReflection($pages) as $reflection) { $pathAnnoation = $reflection->getAnnotation('Path'); $path = $pathAnnoation->path; if (empty($path)) { throw new \UnexpectedValueException(sprintf("Expecting path annoation to have a path value for class %s", $reflection->getName())); } $this->addToPath($path, $reflection->getNamespaceName() . '\\' . $reflection->getName()); } PiconApplication::get()->getPageMapInitializationListener()->onInitialize($this); }