diff --git a/src/ClassAliasAutoloader.php b/src/ClassAliasAutoloader.php index 994d75c..f29de44 100644 --- a/src/ClassAliasAutoloader.php +++ b/src/ClassAliasAutoloader.php @@ -51,9 +51,9 @@ class ClassAliasAutoloader * @param array $excludedAliases * @return static */ - public static function register(Shell $shell, $classMapPath, array $includedAliases = [], array $excludedAliases = []) + public static function register(Shell $shell, $classMapPath, array $includedAliases = [], array $excludedAliases = [], array $classAliases = []) { - return tap(new static($shell, $classMapPath, $includedAliases, $excludedAliases), function ($loader) { + return tap(new static($shell, $classMapPath, $includedAliases, $excludedAliases, $classAliases), function ($loader) { spl_autoload_register([$loader, 'aliasClass']); }); } @@ -67,7 +67,7 @@ public static function register(Shell $shell, $classMapPath, array $includedAlia * @param array $excludedAliases * @return void */ - public function __construct(Shell $shell, $classMapPath, array $includedAliases = [], array $excludedAliases = []) + public function __construct(Shell $shell, $classMapPath, array $includedAliases = [], array $excludedAliases = [], array $classAliases = []) { $this->shell = $shell; $this->vendorPath = dirname(dirname($classMapPath)); @@ -87,6 +87,13 @@ public function __construct(Shell $shell, $classMapPath, array $includedAliases $this->classes[$name] = $class; } } + + foreach ($classAliases as $alias => $class) { + if (! isset($classes[$class])) { + continue; + } + $this->classes[$alias] = $class; + } } /** diff --git a/src/Console/TinkerCommand.php b/src/Console/TinkerCommand.php index f0ddd6a..41f659f 100644 --- a/src/Console/TinkerCommand.php +++ b/src/Console/TinkerCommand.php @@ -68,7 +68,11 @@ public function handle() $config = $this->getLaravel()->make('config'); $loader = ClassAliasAutoloader::register( - $shell, $path, $config->get('tinker.alias', []), $config->get('tinker.dont_alias', []) + $shell, + $path, + $config->get('tinker.alias', []), + $config->get('tinker.dont_alias', []), + $config->get('tinker.class_alias', []) ); if ($code = $this->option('execute')) { diff --git a/tests/ClassAliasAutoloaderTest.php b/tests/ClassAliasAutoloaderTest.php index 08bcdd9..01017d4 100644 --- a/tests/ClassAliasAutoloaderTest.php +++ b/tests/ClassAliasAutoloaderTest.php @@ -78,4 +78,22 @@ public function testVendorClassesCanBeWhitelisted() $this->assertTrue(class_exists('Three')); $this->assertInstanceOf(\One\Two\Three::class, new \Three); } + + public function testCanAliasClassesToAnotherName() + { + $this->loader = ClassAliasAutoloader::register( + $shell = Mockery::mock(Shell::class), + $this->classmapPath, + [], + [], + ['Four' => 'One\Two\Three'] + ); + + $shell->shouldReceive('writeStdout') + ->with("[!] Aliasing 'Four' to 'One\Two\Three' for this Tinker session.\n") + ->once(); + + $this->assertTrue(class_exists('Four')); + $this->assertInstanceOf(\One\Two\Three::class, new \Four); + } }