![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/laminas/laminas-di/src/CodeGenerator/ |
<?php declare(strict_types=1); namespace Laminas\Di\CodeGenerator; use Laminas\Di\Exception\GenerateCodeException; use SplFileObject; use Throwable; use function array_keys; use function array_map; use function assert; use function file_get_contents; use function implode; use function is_string; use function sprintf; use function str_repeat; use function strtr; use function var_export; class AutoloadGenerator { use GeneratorTrait; private const CLASS_TEMPLATE = __DIR__ . '/../../templates/autoloader-class.template'; private const FILE_TEMPLATE = __DIR__ . '/../../templates/autoloader-file.template'; public function __construct(private string $namespace) { } private function writeFile(string $filename, string $code): void { try { $file = new SplFileObject($filename, 'w'); $file->fwrite($code); } catch (Throwable $e) { throw new GenerateCodeException(sprintf('Failed to write output file "%s"', $filename), 0, $e); } } private function buildFromTemplate(string $templateFile, string $outputFile, array $replacements): void { $template = file_get_contents($templateFile); assert(is_string($template)); assert(is_string($this->outputDirectory)); $this->writeFile( sprintf('%s/%s', $this->outputDirectory, $outputFile), strtr( $template, $replacements ) ); } /** * @param array<string, string> $classmap */ private function generateClassmapCode(array &$classmap): string { $lines = array_map( static fn(string $class, string $file): string => sprintf( '%s => %s,', var_export($class, true), var_export($file, true) ), array_keys($classmap), $classmap ); $indentation = sprintf("\n%s", str_repeat(' ', 8)); return implode($indentation, $lines); } /** * @param array<string, string> $classmap */ private function generateAutoloaderClass(array &$classmap): void { $this->buildFromTemplate(self::CLASS_TEMPLATE, 'Autoloader.php', [ '%namespace%' => $this->namespace ? sprintf("namespace %s;\n", $this->namespace) : '', '%classmap%' => $this->generateClassmapCode($classmap), ]); } private function generateAutoloadFile(): void { $this->buildFromTemplate(self::FILE_TEMPLATE, 'autoload.php', [ '%namespace%' => $this->namespace ? sprintf("namespace %s;\n", $this->namespace) : '', ]); } /** * @param array<string, string> $classmap */ public function generate(array &$classmap): void { $this->ensureOutputDirectory(); $this->generateAutoloaderClass($classmap); $this->generateAutoloadFile(); } }