From a675b81eb36eeda6a3b63d4dc27e25b364081e8a Mon Sep 17 00:00:00 2001 From: Alexey Goncharov Date: Tue, 4 Mar 2025 20:09:23 +0100 Subject: [PATCH 1/2] add alias attribute --- src/Illuminate/Container/Attributes/Alias.php | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/Illuminate/Container/Attributes/Alias.php diff --git a/src/Illuminate/Container/Attributes/Alias.php b/src/Illuminate/Container/Attributes/Alias.php new file mode 100644 index 000000000000..04284757078d --- /dev/null +++ b/src/Illuminate/Container/Attributes/Alias.php @@ -0,0 +1,30 @@ +get($attribute->alias); + } +} From 033a4d2343e1bac34803161396e2870bfc33c982 Mon Sep 17 00:00:00 2001 From: Alexey Goncharov Date: Tue, 4 Mar 2025 20:09:31 +0100 Subject: [PATCH 2/2] add test --- .../ContextualAttributeBindingTest.php | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/Container/ContextualAttributeBindingTest.php b/tests/Container/ContextualAttributeBindingTest.php index 8c0d7f7f9f69..62043dd87b14 100644 --- a/tests/Container/ContextualAttributeBindingTest.php +++ b/tests/Container/ContextualAttributeBindingTest.php @@ -7,6 +7,7 @@ use Illuminate\Cache\CacheManager; use Illuminate\Cache\Repository as CacheRepository; use Illuminate\Config\Repository; +use Illuminate\Container\Attributes\Alias; use Illuminate\Container\Attributes\Auth; use Illuminate\Container\Attributes\Authenticated; use Illuminate\Container\Attributes\Cache; @@ -299,6 +300,27 @@ public function testTagAttribute() $this->assertEquals([1, 2], iterator_to_array($value)); } + + public function testAliasAttribute() + { + $container = new Container; + + $container->bind(ContainerTestAliasAttribute::class, fn () => new ContainerTestAliasAttribute('default')); + $container->bind('one', fn () => new ContainerTestAliasAttribute('one')); + $container->bind('two', fn () => new ContainerTestAliasAttribute('two')); + + $default = $container->call(fn (ContainerTestAliasAttribute $object) => $object->name); + + $this->assertEquals('default', $default); + + $one = $container->call(fn (#[Alias('one')] ContainerTestAliasAttribute $object) => $object->name); + + $this->assertEquals('one', $one); + + $two = $container->call(fn (#[Alias('two')] ContainerTestAliasAttribute $object) => $object->name); + + $this->assertEquals('two', $two); + } } #[Attribute(Attribute::TARGET_PARAMETER)] @@ -404,6 +426,14 @@ public function __construct( } } +final class ContainerTestAliasAttribute +{ + public function __construct( + public string $name + ) { + } +} + final class AuthedTest { public function __construct(#[Authenticated('foo')] AuthenticatableContract $foo, #[CurrentUser('bar')] AuthenticatableContract $bar)