8000 Add context attribute · laravel/framework@e3f70d5 · GitHub
[go: up one dir, main page]

Skip to content

Commit e3f70d5

Browse files
committed
Add context attribute
1 parent fba3b98 commit e3f70d5

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace Illuminate\Container\Attributes;
4+
5+
use Attribute;
6+
use Illuminate\Contracts\Container\Container;
7+
use Illuminate\Contracts\Container\ContextualAttribute;
8+
use Ill 8000 uminate\Log\Context\Repository;
9+
10+
#[Attribute(Attribute::TARGET_PARAMETER)]
11+
class Context implements ContextualAttribute
12+
{
13+
/**
14+
* Create a new attribute instance.
15+
*/
16+
public function __construct(public string $key, public mixed $default = null)
17+
{
18+
}
19+
20+
/**
21+
* Resolve the configuration value.
22+
*
23+
* @param self $attribute
24+
* @param \Illuminate\Contracts\Container\Container $container
25+
* @return mixed
26+
*/
27+
public static function resolve(self $attribute, Container $container): mixed
28+
{
29+
return $container->make(Repository::class)->get($attribute->key, $attribute->default);
30+
}
31+
}

tests/Container/ContextualAttributeBindingTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Illuminate\Container\Attributes\Authenticated;
1212
use Illuminate\Container\Attributes\Cache;
1313
use Illuminate\Container\Attributes\Config;
14+
use Illuminate\Container\Attributes\Context;
1415
use Illuminate\Container\Attributes\CurrentUser;
1516
use Illuminate\Container\Attributes\Database;
1617
use Illuminate\Container\Attributes\Log;
@@ -28,6 +29,7 @@
2829
use Illuminate\Database\Eloquent\Model;
2930
use Illuminate\Filesystem\FilesystemManager;
3031
use Illuminate\Http\Request;
32+
use Illuminate\Log\Context\Repository as ContextRepository;
3133
use Illuminate\Log\LogManager;
3234
use Mockery as m;
3335
use PHPUnit\Framework\TestCase;
@@ -215,6 +217,20 @@ public function testRouteParameterAttribute()
215217
$container->make(RouteParameterTest::class);
216218
}
217219

220+
public function testContextAttribute(): void
221+
{
222+
$container = new Container;
223+
224+
$container->singleton(ContextRepository::class, function () {
225+
$context = m::mock(ContextRepository::class);
226+
$context->shouldReceive('get')->once()->with('foo', null)->andReturn('foo');
227+
228+
return $context;
229+
});
230+
231+
$container->make(ContextTest::class);
232+
}
233+
218234
public function testStorageAttribute()
219235
{
220236
$container = new Container;
@@ -425,6 +441,13 @@ public function __construct(#[Config('foo')] string $foo, #[Config('bar')] strin
425441
}
426442
}
427443

444+
final class ContextTest
445+
{
446+
public function __construct(#[Context('foo')] string $foo)
447+
{
448+
}
449+
}
450+
428451
final class DatabaseTest
429452
{
430453
public function __construct(#[Database('foo')] Connection $foo, #[Database('bar')] Connection $bar)

0 commit comments

Comments
 (0)
0