Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions res/php/alias-loader-include.tmpl.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
declare(strict_types=1);

$composerAutoLoader = require dirname(__DIR__) . '/autoload.php';
$classAliasMap = require dirname(__DIR__) . '/composer/autoload_classaliasmap.php';
$classAliasLoader = new TYPO3\ClassAliasLoader\ClassAliasLoader($composerAutoLoader);
$classAliasLoader->setAliasMap($classAliasMap);
$classAliasLoader->register('{$prepend}');
require_once __DIR__ . '/autoload_classaliasmap_static.php';
$classAliasLoader->setAliasMap(TYPO3\ClassAliasLoader\ClassAliasLoaderStaticInit{$suffix}::$aliasMap);
$classAliasLoader->register({$prepend});
TYPO3\ClassAliasLoader\ClassAliasMap::setClassAliasLoader($classAliasLoader);
38 changes: 32 additions & 6 deletions src/ClassAliasMapGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
use Composer\Package\PackageInterface;
use Composer\Util\Filesystem;
use TYPO3\ClassAliasLoader\IncludeFile\PrependToken;
use TYPO3\ClassAliasLoader\IncludeFile\SuffixToken;

/**
* This class loops over all packages that are installed by composer and
Expand Down Expand Up @@ -94,10 +95,24 @@ public function generateAliasMapFiles(): bool
return false;
}

$suffix = null;
if (!$config->get('autoloader-suffix') && is_readable($vendorPath . '/autoload.php')) {
$content = file_get_contents($vendorPath . '/autoload.php');
if (preg_match('{ComposerAutoloaderInit([^:\s]+)::}', $content, $match)) {
$suffix = $match[1];
}
}
if (!$suffix) {
$suffix = $config->get('autoloader-suffix') ?: md5(uniqid('', true));
}

$includeFile = new IncludeFile(
$this->io,
$this->composer,
[
new SuffixToken(
$suffix
),
new PrependToken(
$this->composer->getConfig()
),
Expand All @@ -106,23 +121,34 @@ public function generateAliasMapFiles(): bool
$includeFile->register();

$this->io->write('<info>Generating ' . ($classAliasMappingFound ? '' : 'empty ') . 'class alias map file</info>');
$this->generateAliasMapFile($aliasToClassNameMapping, $classNameToAliasMapping, $targetDir);
$this->generateAliasMapFile($aliasToClassNameMapping, $classNameToAliasMapping, $targetDir, $suffix);

return true;
}

private function generateAliasMapFile(array $aliasToClassNameMapping, array $classNameToAliasMapping, string $targetDir): void
private function generateAliasMapFile(array $aliasToClassNameMapping, array $classNameToAliasMapping, string $targetDir, string $suffix): void
{
$exportArray = [
'aliasToClassNameMapping' => $aliasToClassNameMapping,
'classNameToAliasMapping' => $classNameToAliasMapping,
];

$fileContent = '<?php' . chr(10) . 'return ';
$fileContent .= var_export($exportArray, true);
$fileContent .= ';';
$fileContent = <<<EOF
<?php

file_put_contents($targetDir . '/autoload_classaliasmap.php', $fileContent);
// autoload_classaliasmap_static.php @generated by ClassAliasLoader

namespace TYPO3\ClassAliasLoader;

class ClassAliasLoaderStaticInit$suffix
{
public static \$aliasMap=
EOF;
$fileContent .= var_export($exportArray, true);
$fileContent .= ';
}
';
file_put_contents($targetDir . '/autoload_classaliasmap_static.php', $fileContent);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/IncludeFile.php
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,6 @@ protected function getIncludeFileContent($includeFilePath)
*/
private static function replaceToken($name, $content, $subject)
{
return str_replace('\'{$' . $name . '}\'', $content, $subject);
return str_replace('{$' . $name . '}', $content, $subject);
}
}
34 changes: 34 additions & 0 deletions src/IncludeFile/SuffixToken.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

declare(strict_types=1);

namespace TYPO3\ClassAliasLoader\IncludeFile;

/*
* This file is part of the class alias loader package.
*
* (c) Helmut Hummel <info@helhum.io>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

class SuffixToken implements TokenInterface
{
/**
* @var string
*/
private $name = 'suffix';

public function __construct(public readonly string $suffix) {}

public function getName(): string
{
return $this->name;
}

public function getContent(string $includeFilePath): string
{
return $this->suffix;
}
}
6 changes: 5 additions & 1 deletion tests/Unit/IncludeFileTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ public function setUp(): void
$this->ioMock,
$this->composerMock,
[
new IncludeFile\SuffixToken('asdf'),
new IncludeFile\PrependToken($configMock),
]
);
Expand All @@ -93,6 +94,9 @@ public function tearDown(): void
public function includeFileCanBeWritten(): void
{
$this->subject->register();
self::assertTrue(file_exists($this->testDir . IncludeFile::INCLUDE_FILE));
self::assertFileExists($this->testDir . IncludeFile::INCLUDE_FILE);
$contents = file_get_contents($this->testDir . IncludeFile::INCLUDE_FILE);
self::assertIsString($contents);
self::assertStringContainsString('ClassAliasLoaderStaticInitasdf', $contents);
}
}
Loading