‪TYPO3CMS  11.5
ClassLoadingInformation.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
16 namespace ‪TYPO3\CMS\Core\Core;
17 
18 use Composer\Autoload\ClassLoader;
19 use TYPO3\ClassAliasLoader\ClassAliasMap;
23 use TYPO3\CMS\Core\Package\PackageManager;
25 
35 {
39  public const ‪AUTOLOAD_INFO_DIR = 'autoload/';
40 
44  public const ‪AUTOLOAD_INFO_DIR_TESTS = 'autoload-tests/';
45 
49  public const ‪AUTOLOAD_CLASSMAP_FILENAME = 'autoload_classmap.php';
50 
54  public const ‪AUTOLOAD_PSR4_FILENAME = 'autoload_psr4.php';
55 
59  public const ‪AUTOLOAD_CLASSALIASMAP_FILENAME = 'autoload_classaliasmap.php';
60 
64  protected static ‪$classLoader;
65 
72  public static function ‪setClassLoader(ClassLoader ‪$classLoader)
73  {
74  static::$classLoader = ‪$classLoader;
75  }
76 
83  public static function ‪isClassLoadingInformationAvailable()
84  {
85  return file_exists(self::getClassLoadingInformationDirectory() . self::AUTOLOAD_CLASSMAP_FILENAME);
86  }
87 
91  public static function ‪dumpClassLoadingInformation()
92  {
94  $composerClassLoader = static::getClassLoader();
95  $activeExtensionPackages = static::getActiveExtensionPackages();
96 
97  $generator = GeneralUtility::makeInstance(ClassLoadingInformationGenerator::class, $composerClassLoader, $activeExtensionPackages, ‪Environment::getPublicPath() . '/', self::isTestingContext());
98  $classInfoFiles = $generator->buildAutoloadInformationFiles();
99  ‪GeneralUtility::writeFile(self::getClassLoadingInformationDirectory() . self::AUTOLOAD_CLASSMAP_FILENAME, $classInfoFiles['classMapFile']);
100  ‪GeneralUtility::writeFile(self::getClassLoadingInformationDirectory() . self::AUTOLOAD_PSR4_FILENAME, $classInfoFiles['psr-4File']);
101 
102  $classAliasMapFile = $generator->buildClassAliasMapFile();
103  ‪GeneralUtility::writeFile(self::getClassLoadingInformationDirectory() . self::AUTOLOAD_CLASSALIASMAP_FILENAME, $classAliasMapFile);
104  }
105 
110  public static function ‪updateClassLoadingInformationAfterPackageDeactivation(AfterPackageDeactivationEvent $event): void
111  {
113  return;
114  }
115  static::dumpClassLoadingInformation();
116  }
117 
122  public static function ‪updateClassLoadingInformationAfterPackageActivation(AfterPackageActivationEvent $event): void
123  {
125  return;
126  }
127  static::dumpClassLoadingInformation();
128  }
129 
134  public static function ‪registerClassLoadingInformation()
135  {
136  $composerClassLoader = static::getClassLoader();
137 
139  if (file_exists($dynamicClassAliasMapFile)) {
140  $classAliasMap = require $dynamicClassAliasMapFile;
141  if (is_array($classAliasMap) && !empty($classAliasMap['aliasToClassNameMapping']) && !empty($classAliasMap['classNameToAliasMapping'])) {
142  ClassAliasMap::addAliasMap($classAliasMap);
143  }
144  }
145 
147  if (file_exists($dynamicClassMapFile)) {
148  $classMap = require $dynamicClassMapFile;
149  if (!empty($classMap) && is_array($classMap)) {
150  $composerClassLoader->addClassMap($classMap);
151  }
152  }
153 
155  if (file_exists($dynamicPsr4File)) {
156  $psr4 = require $dynamicPsr4File;
157  if (is_array($psr4)) {
158  foreach ($psr4 as $prefix => $paths) {
159  $composerClassLoader->setPsr4($prefix, $paths);
160  }
161  }
162  }
163  }
164 
171  public static function ‪registerTransientClassLoadingInformationForPackage(PackageInterface $package)
172  {
173  $composerClassLoader = static::getClassLoader();
174  $activeExtensionPackages = static::getActiveExtensionPackages();
175 
176  $generator = GeneralUtility::makeInstance(ClassLoadingInformationGenerator::class, $composerClassLoader, $activeExtensionPackages, ‪Environment::getPublicPath() . '/', self::isTestingContext());
177 
178  $classInformation = $generator->buildClassLoadingInformationForPackage($package);
179  $composerClassLoader->addClassMap($classInformation['classMap']);
180  foreach ($classInformation['psr-4'] as $prefix => $paths) {
181  $composerClassLoader->setPsr4($prefix, $paths);
182  }
183  $classAliasMap = $generator->buildClassAliasMapForPackage($package);
184  if (is_array($classAliasMap) && !empty($classAliasMap['aliasToClassNameMapping']) && !empty($classAliasMap['classNameToAliasMapping'])) {
185  ClassAliasMap::addAliasMap($classAliasMap);
186  }
187  }
188 
192  protected static function ‪getClassLoadingInformationDirectory()
193  {
194  if (self::isTestingContext()) {
196  }
198  }
199 
206  public static function ‪getClassNameForAlias($alias)
207  {
208  return ClassAliasMap::getClassNameForAlias($alias);
209  }
210 
215  protected static function ‪ensureAutoloadInfoDirExists()
216  {
218  if (!file_exists($autoloadInfoDir)) {
219  ‪GeneralUtility::mkdir_deep($autoloadInfoDir);
220  }
221  }
222 
229  public static function ‪getClassLoader()
230  {
231  return static::$classLoader;
232  }
233 
240  protected static function ‪isTestingContext()
241  {
243  }
244 
250  protected static function ‪getActiveExtensionPackages()
251  {
252  $activeExtensionPackages = [];
253  $packageManager = GeneralUtility::makeInstance(PackageManager::class);
254  foreach ($packageManager->getActivePackages() as $package) {
255  if ($package->getPackageMetaData()->isFrameworkType()) {
256  // Skip all core packages as the class loading info is prepared for them already
257  continue;
258  }
259  $activeExtensionPackages[] = $package;
260  }
261  return $activeExtensionPackages;
262  }
263 }
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\AUTOLOAD_PSR4_FILENAME
‪const AUTOLOAD_PSR4_FILENAME
Definition: ClassLoadingInformation.php:54
‪TYPO3\CMS\Core\Core\Environment\getPublicPath
‪static string getPublicPath()
Definition: Environment.php:206
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\AUTOLOAD_CLASSALIASMAP_FILENAME
‪const AUTOLOAD_CLASSALIASMAP_FILENAME
Definition: ClassLoadingInformation.php:59
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\getClassLoader
‪static ClassLoader getClassLoader()
Definition: ClassLoadingInformation.php:228
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\dumpClassLoadingInformation
‪static dumpClassLoadingInformation()
Definition: ClassLoadingInformation.php:90
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\getClassLoadingInformationDirectory
‪static string getClassLoadingInformationDirectory()
Definition: ClassLoadingInformation.php:191
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\isClassLoadingInformationAvailable
‪static bool isClassLoadingInformationAvailable()
Definition: ClassLoadingInformation.php:82
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\ensureAutoloadInfoDirExists
‪static ensureAutoloadInfoDirExists()
Definition: ClassLoadingInformation.php:214
‪TYPO3\CMS\Core\Core\ClassLoadingInformation
Definition: ClassLoadingInformation.php:35
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\updateClassLoadingInformationAfterPackageActivation
‪static updateClassLoadingInformationAfterPackageActivation(AfterPackageActivationEvent $event)
Definition: ClassLoadingInformation.php:121
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\getActiveExtensionPackages
‪static PackageInterface[] getActiveExtensionPackages()
Definition: ClassLoadingInformation.php:249
‪TYPO3\CMS\Core\Package\PackageInterface
Definition: PackageInterface.php:22
‪TYPO3\CMS\Core\Core\Environment\getContext
‪static ApplicationContext getContext()
Definition: Environment.php:141
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\AUTOLOAD_CLASSMAP_FILENAME
‪const AUTOLOAD_CLASSMAP_FILENAME
Definition: ClassLoadingInformation.php:49
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\AUTOLOAD_INFO_DIR
‪const AUTOLOAD_INFO_DIR
Definition: ClassLoadingInformation.php:39
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\getClassNameForAlias
‪static mixed getClassNameForAlias($alias)
Definition: ClassLoadingInformation.php:205
‪TYPO3\CMS\Core\Core\ApplicationContext\isTesting
‪bool isTesting()
Definition: ApplicationContext.php:118
‪TYPO3\CMS\Core\Utility\GeneralUtility\mkdir_deep
‪static mkdir_deep($directory)
Definition: GeneralUtility.php:1908
‪TYPO3\CMS\Core\Package\Event\AfterPackageActivationEvent
Definition: AfterPackageActivationEvent.php:24
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\updateClassLoadingInformationAfterPackageDeactivation
‪static updateClassLoadingInformationAfterPackageDeactivation(AfterPackageDeactivationEvent $event)
Definition: ClassLoadingInformation.php:109
‪TYPO3\CMS\Core\Core\Environment\isComposerMode
‪static bool isComposerMode()
Definition: Environment.php:152
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\AUTOLOAD_INFO_DIR_TESTS
‪const AUTOLOAD_INFO_DIR_TESTS
Definition: ClassLoadingInformation.php:44
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\registerTransientClassLoadingInformationForPackage
‪static registerTransientClassLoadingInformationForPackage(PackageInterface $package)
Definition: ClassLoadingInformation.php:170
‪TYPO3\CMS\Core\Package\Event\AfterPackageDeactivationEvent
Definition: AfterPackageDeactivationEvent.php:24
‪TYPO3\CMS\Core\Core
Definition: ApplicationContext.php:16
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\registerClassLoadingInformation
‪static registerClassLoadingInformation()
Definition: ClassLoadingInformation.php:133
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\$classLoader
‪static ClassLoader $classLoader
Definition: ClassLoadingInformation.php:63
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Core\Utility\GeneralUtility\writeFile
‪static bool writeFile($file, $content, $changePermissions=false)
Definition: GeneralUtility.php:1722
‪TYPO3\CMS\Core\Core\Environment\getLegacyConfigPath
‪static string getLegacyConfigPath()
Definition: Environment.php:308
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\setClassLoader
‪static setClassLoader(ClassLoader $classLoader)
Definition: ClassLoadingInformation.php:71
‪TYPO3\CMS\Core\Core\ClassLoadingInformation\isTestingContext
‪static bool isTestingContext()
Definition: ClassLoadingInformation.php:239