/** * Visitor method that registers the class loaders in the application. * * @param \AppserverIo\Psr\Application\ApplicationInterface $application The application instance to register the class loader with * @param \AppserverIo\Appserver\Core\Api\Node\ClassLoaderNodeInterface $configuration The class loader configuration * * @return void */ public static function visit(ApplicationInterface $application, ClassLoaderNodeInterface $configuration) { // load the web application path we want to register the class loader for $webappPath = $application->getWebappPath(); // initialize the class path and the enforcement directories $classPath = array(); $enforcementDirs = array(); // add the possible class path if folder is available foreach ($configuration->getDirectories() as $directory) { if (is_dir($webappPath . $directory->getNodeValue())) { array_push($classPath, $webappPath . $directory->getNodeValue()); if ($directory->isEnforced()) { array_push($enforcementDirs, $webappPath . $directory->getNodeValue()); } } } // initialize the arrays of different omit possibilities $omittedEnforcement = array(); $omittedAutoLoading = array(); // iterate over all namespaces and check if they are omitted in one or the other way foreach ($configuration->getNamespaces() as $namespace) { // is the enforcement omitted for this namespace? if ($namespace->omitEnforcement()) { $omittedEnforcement[] = $namespace->getNodeValue()->__toString(); } // is the autoloading omitted for this namespace? if ($namespace->omitAutoLoading()) { $omittedAutoLoading[] = $namespace->getNodeValue()->__toString(); } } // initialize the class loader configuration $config = new Config(); // set the environment mode we want to use $config->setValue('environment', $configuration->getEnvironment()); // set the cache directory $config->setValue('cache/dir', $application->getCacheDir()); // set the default autoloader values $config->setValue('autoloader/dirs', $classPath); // collect the omitted namespaces (if any) $config->setValue('autoloader/omit', $omittedAutoLoading); $config->setValue('enforcement/omit', $omittedEnforcement); // set the default enforcement configuration values $config->setValue('enforcement/dirs', $enforcementDirs); $config->setValue('enforcement/enforce-default-type-safety', $configuration->getTypeSafety()); $config->setValue('enforcement/processing', $configuration->getProcessing()); $config->setValue('enforcement/level', $configuration->getEnforcementLevel()); $config->setValue('enforcement/logger', $application->getInitialContext()->getSystemLogger()); // create a autoloader instance and initialize it $classLoader = new DgClassLoader($config); $classLoader->init(new StackableStructureMap($config->getValue('autoloader/dirs'), $config->getValue('enforcement/dirs'), $config), new AspectRegister()); // add the autoloader to the manager $application->addClassLoader($classLoader, $configuration); }
/** * Visitor method that registers the class loaders in the application. * * @param \AppserverIo\Psr\Application\ApplicationInterface $application The application instance to register the class loader with * @param \AppserverIo\Appserver\Core\Api\Node\ClassLoaderNodeInterface $configuration The class loader configuration * * @return void */ public static function visit(ApplicationInterface $application, ClassLoaderNodeInterface $configuration) { // initialize the storage for the class map and the include path $classMap = new GenericStackable(); $includePath = array(); // load the application directory $webappPath = $application->getWebappPath(); // load the composer class loader for the configured directories foreach ($configuration->getDirectories() as $directory) { // we prepare the directories to include scripts AFTER registering (in application context) $includePath[] = $webappPath . $directory->getNodeValue(); } // initialize and return the SPL class loader instance $application->addClassLoader(new SplClassLoader($classMap, $includePath), $configuration); }
/** * Visitor method that registers the class loaders in the application. * * @param \AppserverIo\Psr\Application\ApplicationInterface $application The application instance to register the class loader with * @param \AppserverIo\Appserver\Core\Api\Node\ClassLoaderNodeInterface $configuration The class loader configuration * * @return void */ public static function visit(ApplicationInterface $application, ClassLoaderNodeInterface $configuration) { // load the application directory $webappPath = $application->getWebappPath(); // initialize the array with the configured directories $directories = array(); // load the composer class loader for the configured directories /** @var \AppserverIo\Appserver\Core\Api\Node\DirectoryNode $directory */ foreach ($configuration->getDirectories() as $directory) { // we prepare the directories to include scripts AFTER registering (in application context) $directories[] = $webappPath . $directory->getNodeValue(); // check if an autoload.php is available if (file_exists($webappPath . $directory->getNodeValue() . DIRECTORY_SEPARATOR . 'autoload.php')) { // if yes, we try to instanciate a new class loader instance $classLoader = new ComposerClassLoader($directories); // set the composer include paths if (file_exists($webappPath . $directory->getNodeValue() . '/composer/include_paths.php')) { $includePaths = (require $webappPath . $directory->getNodeValue() . '/composer/include_paths.php'); array_push($includePaths, get_include_path()); set_include_path(join(PATH_SEPARATOR, $includePaths)); } // add the composer namespace declarations if (file_exists($webappPath . $directory->getNodeValue() . '/composer/autoload_namespaces.php')) { $map = (require $webappPath . $directory->getNodeValue() . '/composer/autoload_namespaces.php'); foreach ($map as $namespace => $path) { $classLoader->set($namespace, $path); } } // add the composer PSR-4 compatible namespace declarations if (file_exists($webappPath . $directory->getNodeValue() . '/composer/autoload_psr4.php')) { $map = (require $webappPath . $directory->getNodeValue() . '/composer/autoload_psr4.php'); foreach ($map as $namespace => $path) { $classLoader->setPsr4($namespace, $path); } } // add the composer class map if (file_exists($webappPath . $directory->getNodeValue() . '/composer/autoload_classmap.php')) { $classMap = (require $webappPath . $directory->getNodeValue() . '/composer/autoload_classmap.php'); if ($classMap) { $classLoader->addClassMap($classMap); } } // attach the class loader instance $application->addClassLoader($classLoader, $configuration); } } }