/** * @param array $paths */ private function setupAutoloader(array $paths = []) { require_once __DIR__ . '/src/ClassLoader/Psr4ClassLoader.php'; $loader = new Psr4ClassLoader(); foreach ($paths as $ns => $path) { foreach ($path as $k => $dir) { $loader->addPrefix($ns, implode(DIRECTORY_SEPARATOR, $dir)); } } $loader->register(); }
/** * @param array $dirs [[prefix, path, <recursive>], ...] * @return Psr4ClassLoader */ public function loadClass(array $dirs) { $loader = new Psr4ClassLoader(); $root = realpath($this->root); $paths = []; foreach ($dirs as $d) { if (is_array($d) && count($d) > 1) { $prefix = $d[0]; $path = $d[1]; $r = false; if (count($d) > 2 && $d[2]) { $r = true; } $p = $this->getClassPath($root, $prefix, $path, $r); $paths = array_merge($paths, $p); } } foreach ($paths as $p) { $loader->addPrefix($p['prefix'], $p['path']); } $loader->register(); return $loader; }
<?php require_once __DIR__ . '/vendor/symfony/class-loader/Psr4ClassLoader.php'; use MF\App; use MF\Render\MessageRender; use Symfony\Component\ClassLoader\Psr4ClassLoader; $loader = new Psr4ClassLoader(); $loader->addPrefix('MF', __DIR__ . '/src'); $loader->register(); $app = new App(new MessageRender('Hello world by Psr4ClassLoader!')); $app->renderResponse();
/** * Adds concrete5's core autoloading prefixes * * * The following prefixes are registered: * <ul> * <li>`Concrete\StartingPointPackage` -> `concrete/config/install/packages`</li> * <li>`Concrete\Attribute` -> `concrete/attributes`</li> * <li>`Concrete\Authentication` -> `concrete/authentication`</li> * <li>`Concrete\Block` -> `concrete/blocks`</li> * <li>`Concrete\Theme` -> `concrete/themes`</li> * <li>`Concrete\Controller\PageType` -> `concrete/controllers/page_types`</li> * <li>`Concrete\Controller` -> `concrete/controllers`</li> * <li>`Concrete\Job` -> `concrete/jobs`</li> * <li>`Concrete\Core` -> `concrete/src`</li> * <li>`Application\StartingPointPackage` -> `application/config/install/packages`</li> * <li>`Application\Attribute` -> `application/attributes`</li> * <li>`Application\Authentication` -> `application/authentication`</li> * <li>`Application\Block` -> `application/blocks`</li> * <li>`Application\Theme` -> `application/themes`</li> * <li>`Application\Controller\PageType` -> `application/controllers/page_types`</li> * <li>`Application\Controller` -> `application/controllers`</li> * <li>`Application\Job` -> `application/jobs`</li> * <li>`Application\Core` -> `application/src`</li> * </ul> * * The application namespace can be customized by setting `namespace` in the application's `config/app.php`. */ protected function setupFileAutoloader() { $symfonyLoader = new ModifiedPSR4ClassLoader(); $symfonyLoader->addPrefix(NAMESPACE_SEGMENT_VENDOR . '\\StartingPointPackage', DIR_BASE_CORE . '/config/install/' . DIRNAME_PACKAGES); $symfonyLoader->addPrefix(NAMESPACE_SEGMENT_VENDOR . '\\Attribute', DIR_BASE_CORE . '/' . DIRNAME_ATTRIBUTES); $symfonyLoader->addPrefix(NAMESPACE_SEGMENT_VENDOR . '\\MenuItem', DIR_BASE_CORE . '/' . DIRNAME_MENU_ITEMS); $symfonyLoader->addPrefix(NAMESPACE_SEGMENT_VENDOR . '\\Authentication', DIR_BASE_CORE . '/' . DIRNAME_AUTHENTICATION); $symfonyLoader->addPrefix(NAMESPACE_SEGMENT_VENDOR . '\\Block', DIR_BASE_CORE . '/' . DIRNAME_BLOCKS); $symfonyLoader->addPrefix(NAMESPACE_SEGMENT_VENDOR . '\\Theme', DIR_BASE_CORE . '/' . DIRNAME_THEMES); $symfonyLoader->addPrefix(NAMESPACE_SEGMENT_VENDOR . '\\Controller\\PageType', DIR_BASE_CORE . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_TYPES); $symfonyLoader->addPrefix(NAMESPACE_SEGMENT_VENDOR . '\\Controller', DIR_BASE_CORE . '/' . DIRNAME_CONTROLLERS); $symfonyLoader->addPrefix(NAMESPACE_SEGMENT_VENDOR . '\\Job', DIR_BASE_CORE . '/' . DIRNAME_JOBS); $namespace = 'Application'; $app_config_path = DIR_APPLICATION . '/config/app.php'; $provideCoreExtensionAutoloaderMapping = false; if (file_exists($app_config_path)) { $app_config = (require $app_config_path); if (isset($app_config['namespace'])) { $namespace = $app_config['namespace']; } if (isset($app_config['provide_core_extension_autoloader_mapping'])) { $provideCoreExtensionAutoloaderMapping = true; } } $symfonyLoader->addPrefix($namespace . '\\StartingPointPackage', DIR_APPLICATION . '/config/install/' . DIRNAME_PACKAGES); $symfonyLoader->addPrefix($namespace . '\\Attribute', DIR_APPLICATION . '/' . DIRNAME_ATTRIBUTES); $symfonyLoader->addPrefix($namespace . '\\MenuItem', DIR_APPLICATION . '/' . DIRNAME_MENU_ITEMS); $symfonyLoader->addPrefix($namespace . '\\Authentication', DIR_APPLICATION . '/' . DIRNAME_AUTHENTICATION); $symfonyLoader->addPrefix($namespace . '\\Block', DIR_APPLICATION . '/' . DIRNAME_BLOCKS); $symfonyLoader->addPrefix($namespace . '\\Theme', DIR_APPLICATION . '/' . DIRNAME_THEMES); $symfonyLoader->addPrefix($namespace . '\\Controller\\PageType', DIR_APPLICATION . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_TYPES); $symfonyLoader->addPrefix($namespace . '\\Controller', DIR_APPLICATION . '/' . DIRNAME_CONTROLLERS); $symfonyLoader->addPrefix($namespace . '\\Job', DIR_APPLICATION . '/' . DIRNAME_JOBS); $symfonyLoader->register(); $strictLoader = new SymfonyClassLoader(); $strictLoader->addPrefix(NAMESPACE_SEGMENT_VENDOR . '\\Core', DIR_BASE_CORE . '/' . DIRNAME_CLASSES); if ($provideCoreExtensionAutoloaderMapping) { $strictLoader->addPrefix($namespace, DIR_APPLICATION . '/' . DIRNAME_CLASSES . '/Concrete'); } else { $strictLoader->addPrefix($namespace . '\\Src', DIR_APPLICATION . '/' . DIRNAME_CLASSES); } $strictLoader->register(); }
public function registerHelpers() { Core::bind('helper/blogify', 'Concrete\\Package\\Problog\\Controller\\Helpers\\Blogify'); Core::bind('helper/blog_actions', 'Concrete\\Package\\Problog\\Controller\\Helpers\\BlogActions'); $psr4_loader = new Psr4ClassLoader(); $psr4_loader->addPrefix('\\Concrete\\Package\\Problog\\src', __DIR__ . '/src'); $psr4_loader->register(); }
namespace { require_once __DIR__ . '/vendor/autoload.php'; use Dima\Legacy\TestClass as TestLoadedByMap; use Dima\Test as TestPsr0; use Symfony\Component\ClassLoader\ClassLoader; use Symfony\Component\ClassLoader\ClassMapGenerator; use Symfony\Component\ClassLoader\MapClassLoader; use Symfony\Component\ClassLoader\Psr4ClassLoader; use Symfony\Component\ClassLoader\XcacheClassLoader; use DG\SymfonyCert\Controller\HomeController; $psr0Loader = new ClassLoader(); $psr0Loader->addPrefix('Dima', __DIR__ . '/srcPsr0'); $cachedLoader = new XcacheClassLoader(sha1(__FILE__), $psr0Loader); $cachedLoader->register(); $psr0Loader->unregister(); $psr4Loader = new Psr4ClassLoader(); $psr4Loader->addPrefix('DG\\SymfonyCert\\', __DIR__ . '/src'); $psr4Loader->register(); $mapLoader = new MapClassLoader(['Dima\\Legacy\\TestClass' => __DIR__ . '/srcPsr0/TestClass.php']); $mapLoader->register(); ClassMapGenerator::dump(__DIR__ . '/srcThirdParty', __DIR__ . '/class_map.php'); $classMap = (include __DIR__ . '/class_map.php'); $mapLoader2 = new MapClassLoader($classMap); $mapLoader2->register(); //Psr0 loader + XCache TestPsr0::output("Hello from Psr0 loaded class!"); //Map loader TestLoadedByMap::test(); $homeController = new HomeController(); echo $homeController->indexAction()->getContent(), "\n"; }