TYPO3 CMS  TYPO3_6-2
ClassAliasMap.php
Go to the documentation of this file.
1 <?php
2 namespace TYPO3\CMS\Core\Core;
17 
22 
28  protected $aliasToClassNameMapping = array();
29 
35  protected $classNameToAliasMapping = array();
36 
40  protected $classesCache;
41 
45  protected $coreCache;
46 
50  protected $classLoader;
51 
56 
60  protected $packages = array();
61 
65  public function injectClassesCache(\TYPO3\CMS\Core\Cache\Frontend\StringFrontend $classesCache) {
66  $this->classesCache = $classesCache;
67  }
68 
72  public function injectCoreCache(\TYPO3\CMS\Core\Cache\Frontend\PhpFrontend $coreCache) {
73  $this->coreCache = $coreCache;
74  }
75 
80  $this->classLoader = $classLoader;
81  }
82 
86  public function injectComposerClassLoader(ClassAliasLoader $composerClassLoader) {
87  $this->composerClassLoader = $composerClassLoader;
88  }
89 
96  public function setPackages(array $packages) {
97  $this->packages = $packages;
98  return $this;
99  }
100 
107  // Needed for early instance alias mapping
108  $aliasToClassNameMapping = array();
109  // Final mapping array
110  $classNameToAliasMapping = array();
111  foreach ($this->packages as $package) {
112  if (!$package instanceof \TYPO3\CMS\Core\Package\Package || $package->isProtected()) {
113  // Skip non core packages and all protected packages.
114  // The latter will be covered by composer class loader.
115  continue;
116  }
117  foreach ($package->getClassAliases() as $aliasClassName => $className) {
118  $lowercasedAliasClassName = strtolower($aliasClassName);
119  $aliasToClassNameMapping[$lowercasedAliasClassName] = $className;
120  $classNameToAliasMapping[$className][$lowercasedAliasClassName] = $lowercasedAliasClassName;
121  }
122  }
124 
126  }
127 
135  foreach ($classNameToAliasMapping as $originalClassName => $aliasClassNames) {
136  $originalClassNameCacheEntryIdentifier = str_replace('\\', '_', strtolower($originalClassName));
137  // Trigger autoloading for all aliased class names, so a cache entry is created
138  $classLoadingInformation = $this->classLoader->buildClassLoadingInformation($originalClassName);
139  if (FALSE !== $classLoadingInformation) {
140  $classLoadingInformation = implode("\xff", array_merge($classLoadingInformation, $aliasClassNames));
141  $this->classesCache->set($originalClassNameCacheEntryIdentifier, $classLoadingInformation);
142  foreach ($aliasClassNames as $aliasClassName) {
143  $aliasClassNameCacheEntryIdentifier = str_replace('\\', '_', strtolower($aliasClassName));
144  $this->classesCache->set($aliasClassNameCacheEntryIdentifier, $classLoadingInformation);
145  }
146  }
147  }
148  }
149 
157  $classesLoadedPriorToClassLoader = array_intersect($aliasToClassNameMapping, array_merge(get_declared_classes(), get_declared_interfaces()));
158  if (empty($classesLoadedPriorToClassLoader)) {
159  return;
160  }
161 
162  foreach ($classesLoadedPriorToClassLoader as $aliasClassName => $originalClassName) {
163  $this->setAliasForClassName($aliasClassName, $originalClassName);
164  }
165  }
166 
174  public function setAliasForClassName($aliasClassName, $originalClassName) {
175  if (isset($this->aliasToClassNameMapping[$lowercasedAliasClassName = strtolower($aliasClassName)])) {
176  return TRUE;
177  }
178  $this->aliasToClassNameMapping[$lowercasedAliasClassName] = $originalClassName;
179  $this->classNameToAliasMapping[strtolower($originalClassName)][$lowercasedAliasClassName] = $aliasClassName;
180  return (class_exists($aliasClassName, FALSE) || interface_exists($aliasClassName, FALSE)) ? TRUE : class_alias($originalClassName, $aliasClassName);
181  }
182 
189  public function getClassNameForAlias($alias) {
190  $lookUpClassName = strtolower($alias);
191  $className = $this->composerClassLoader->getClassNameForAlias($alias);
192  return isset($this->aliasToClassNameMapping[$lookUpClassName]) ? $this->aliasToClassNameMapping[$lookUpClassName] : $className;
193  }
194 
195 
202  public function getAliasesForClassName($className) {
203  $lookUpClassName = strtolower($className);
204  return isset($this->classNameToAliasMapping[$lookUpClassName]) ? $this->classNameToAliasMapping[$lookUpClassName] : array($className);
205  }
206 }
buildMappingFiles(array $classNameToAliasMapping)
injectClassLoader(ClassLoader $classLoader)
injectClassesCache(\TYPO3\CMS\Core\Cache\Frontend\StringFrontend $classesCache)
setAliasForClassName($aliasClassName, $originalClassName)
initializeAndSetAliasesForEarlyInstances(array $aliasToClassNameMapping)
injectComposerClassLoader(ClassAliasLoader $composerClassLoader)
injectCoreCache(\TYPO3\CMS\Core\Cache\Frontend\PhpFrontend $coreCache)