2 namespace TYPO3\CMS\Core\Core;
77 if (empty($manifest->autoload)) {
79 $classMap = $this->
createClassMap($packagePath, $useRelativePaths, !$this->isDevMode);
82 if (!empty($autoloadPsr4)) {
83 $classLoaderPrefixesPsr4 = $this->classLoader->getPrefixesPsr4();
84 foreach ($autoloadPsr4 as $namespacePrefix => $path) {
85 $namespacePath = $packagePath . $path;
86 if ($useRelativePaths) {
87 $psr4[$namespacePrefix] = $this->
makePathRelative($namespacePath, realpath($namespacePath));
89 $psr4[$namespacePrefix] = $namespacePath;
91 if (!empty($classLoaderPrefixesPsr4[$namespacePrefix])) {
94 $classMap = array_merge($classMap, $this->
createClassMap($namespacePath, $useRelativePaths,
false, $namespacePrefix));
99 if (!empty($autoloadClassmap)) {
100 foreach ($autoloadClassmap as $path) {
101 $classMap = array_merge($classMap, $this->
createClassMap($packagePath . $path, $useRelativePaths));
106 return array(
'classMap' => $classMap,
'psr-4' => $psr4);
119 $finalAutoloadSection = [];
120 $autoloadDefinition = json_decode(json_encode($manifest->autoload),
true);
121 if (!empty($autoloadDefinition[$section]) && is_array($autoloadDefinition[$section])) {
122 $finalAutoloadSection = $autoloadDefinition[$section];
124 if ($this->isDevMode) {
125 $autoloadDefinitionDev = json_decode(json_encode($manifest->{
'autoload-dev'}),
true);
126 if (!empty($autoloadDefinitionDev[$section]) && is_array($autoloadDefinitionDev[$section])) {
127 $finalAutoloadSection = array_merge($finalAutoloadSection, $autoloadDefinitionDev[$section]);
131 return $finalAutoloadSection;
143 protected function createClassMap($classesPath, $useRelativePaths =
false, $ignorePotentialTestClasses =
false, $namespace = null)
147 if ($ignorePotentialTestClasses) {
148 if ($this->isIgnoredPath($classesPath, $path)) {
151 if ($this->isIgnoredClassName($class)) {
155 if ($useRelativePaths) {
156 $classMap[$class] = $this->makePathRelative($classesPath, $path);
158 $classMap[$class] = $path;
172 protected function isIgnoredPath($packagePath, $path)
174 if (stripos($this->makePathRelative($packagePath, $path,
false),
'tests') !==
false) {
188 protected function isIgnoredClassName($className)
190 foreach (array(
'Test',
'Fixture') as $suffix) {
191 if (preg_match(
'/(^|[a-z])' . $suffix .
'$/', $className)) {
207 $aliasToClassNameMapping = [];
208 $classNameToAliasMapping = [];
209 $possibleClassAliasFiles = [];
211 if (!empty($manifest->extra->{
'typo3/class-alias-loader'}->{
'class-alias-maps'})) {
212 $possibleClassAliasFiles = $manifest->extra->{
'typo3/class-alias-loader'}->{
'class-alias-maps'};
213 if (!is_array($possibleClassAliasFiles)) {
214 throw new \TYPO3\CMS\Core\Error\Exception(
'"typo3/class-alias-loader"/"class-alias-maps" must return an array!', 1444142481);
217 $possibleClassAliasFiles[] =
'Migrations/Code/ClassAliasMap.php';
219 $packagePath = $package->getPackagePath();
220 foreach ($possibleClassAliasFiles as $possibleClassAliasFile) {
221 $possiblePathToClassAliasFile = $packagePath . $possibleClassAliasFile;
222 if (file_exists($possiblePathToClassAliasFile)) {
223 $packageAliasMap = require $possiblePathToClassAliasFile;
224 if (!is_array($packageAliasMap)) {
225 throw new \TYPO3\CMS\Core\Error\Exception(
'"class alias maps" must return an array', 1422625075);
227 foreach ($packageAliasMap as $aliasClassName => $className) {
228 $lowerCasedAliasClassName = strtolower($aliasClassName);
229 $aliasToClassNameMapping[$lowerCasedAliasClassName] = $className;
230 $classNameToAliasMapping[$className][$lowerCasedAliasClassName] = $lowerCasedAliasClassName;
235 return array(
'aliasToClassNameMapping' => $aliasToClassNameMapping,
'classNameToAliasMapping' => $classNameToAliasMapping);
243 public function buildAutoloadInformationFiles()
245 $psr4File = $classMapFile = <<<EOF
250 \$typo3InstallDir = PATH_site;
257 foreach ($this->activeExtensionPackages as $package) {
258 $classLoadingInformation = $this->buildClassLoadingInformationForPackage($package,
true);
259 $classMap = array_merge($classMap, $classLoadingInformation[
'classMap']);
260 $psr4 = array_merge($psr4, $classLoadingInformation[
'psr-4']);
265 foreach ($classMap as $class => $relativePath) {
266 $classMapFile .= sprintf(
' %s => %s,', var_export($class,
true), $this->getPathCode($relativePath)) . LF;
268 $classMapFile .=
");\n";
270 foreach ($psr4 as $prefix => $relativePath) {
271 $psr4File .= sprintf(
' %s => array(%s),', var_export($prefix,
true), $this->getPathCode($relativePath)) . LF;
275 return array(
'classMapFile' => $classMapFile,
'psr-4File' => $psr4File);
286 protected function makePathRelative($packagePath, $realPathOfClassFile, $relativeToRoot =
true)
288 $realPathOfClassFile = GeneralUtility::fixWindowsFilePath($realPathOfClassFile);
289 $packageRealPath = GeneralUtility::fixWindowsFilePath(realpath($packagePath));
290 $relativePackagePath = rtrim(substr($packagePath, strlen($this->installationRoot)),
'/');
291 if ($relativeToRoot) {
292 if ($realPathOfClassFile === $packageRealPath) {
293 $relativePathToClassFile = $relativePackagePath;
295 $relativePathToClassFile = $relativePackagePath .
'/' . ltrim(substr($realPathOfClassFile, strlen($packageRealPath)),
'/');
298 $relativePathToClassFile = ltrim(substr($realPathOfClassFile, strlen($packageRealPath)),
'/');
301 return $relativePathToClassFile;
310 protected function getPathCode($relativePathToClassFile)
312 return '$typo3InstallDir . ' . var_export($relativePathToClassFile,
true);
322 public function buildClassAliasMapFile()
324 $aliasToClassNameMapping = array();
325 $classNameToAliasMapping = array();
326 foreach ($this->activeExtensionPackages as $package) {
327 $aliasMappingForPackage = $this->buildClassAliasMapForPackage($package);
328 $aliasToClassNameMapping = array_merge($aliasToClassNameMapping, $aliasMappingForPackage[
'aliasToClassNameMapping']);
329 $classNameToAliasMapping = array_merge($classNameToAliasMapping, $aliasMappingForPackage[
'classNameToAliasMapping']);
331 $exportArray = array(
332 'aliasToClassNameMapping' => $aliasToClassNameMapping,
333 'classNameToAliasMapping' => $classNameToAliasMapping
335 $fileContent =
'<?php' . chr(10) .
'return ';
336 $fileContent .= var_export($exportArray,
true);
337 $fileContent .=
";\n";