Skip to content

Commit 82b2df4

Browse files
author
Ilya Sakovich
authored
Merge pull request #22 from klimov-paul/refactor-blade-directive
[Enh] Refactor Blade directive setup
2 parents cc77f11 + b1081db commit 82b2df4

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

config/shared-data.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,12 @@
3333
'name' => 'shared',
3434
],
3535

36+
/*
37+
* Blade directive name.
38+
*
39+
* By default the Blade directive named 'shared'.
40+
*
41+
* It means that the shared data rendering will be available in view files via `@shared`
42+
*/
43+
'blade_directive' => 'shared',
3644
];

src/Providers/SharedDataServiceProvider.php

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
namespace Coderello\SharedData\Providers;
44

55
use Coderello\SharedData\SharedData;
6-
use Illuminate\Support\Facades\Blade;
76
use Illuminate\Support\ServiceProvider;
7+
use Illuminate\View\Compilers\BladeCompiler;
88
use Illuminate\Contracts\Support\DeferrableProvider;
99

1010
class SharedDataServiceProvider extends ServiceProvider implements DeferrableProvider
@@ -16,10 +16,6 @@ class SharedDataServiceProvider extends ServiceProvider implements DeferrablePro
1616
*/
1717
public function boot()
1818
{
19-
Blade::directive('shared', function () {
20-
return '<?php echo app(\Coderello\SharedData\SharedData::class)->render(); ?>';
21-
});
22-
2319
$this->publishes([
2420
__DIR__.'/../../config/shared-data.php' => config_path('shared-data.php'),
2521
], 'shared-data-config');
@@ -40,6 +36,14 @@ public function register()
4036
$this->app->singleton(SharedData::class, function () {
4137
return new SharedData($this->app['config']['shared-data']);
4238
});
39+
40+
$this->app->extend('blade.compiler', function (BladeCompiler $bladeCompiler) {
41+
$bladeCompiler->directive($this->app['config']['shared-data']['blade_directive'], function () {
42+
return '<?php echo app(\\'.SharedData::class.'::class)->render(); ?>';
43+
});
44+
45+
return $bladeCompiler;
46+
});
4347
}
4448

4549
/**
@@ -51,6 +55,7 @@ public function provides()
5155
{
5256
return [
5357
SharedData::class,
58+
'blade.compiler'
5459
];
5560
}
5661
}

tests/SharedDataTest.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Coderello\SharedData\Tests;
44

5+
use Coderello\SharedData\Providers\SharedDataServiceProvider;
56
use Coderello\SharedData\SharedData;
67
use Illuminate\Contracts\Support\Arrayable;
78
use JsonSerializable;
@@ -293,11 +294,26 @@ public function testForget()
293294
$this->assertSame([], $this->sharedData->get());
294295
}
295296

296-
public function testDirective()
297+
public function testBladeDirective()
297298
{
298299
$this->assertEquals(
299300
shared()->render(),
300301
view('shared')->render()
301302
);
302303
}
304+
305+
/**
306+
* @depends testBladeDirective
307+
*/
308+
public function testBladeDirectiveCustom()
309+
{
310+
$this->app->make('config')->set('shared-data.blade_directive', 'shared_custom');
311+
312+
$this->app->register(SharedDataServiceProvider::class);
313+
314+
$this->assertEquals(
315+
shared()->render(),
316+
view('shared-custom')->render()
317+
);
318+
}
303319
}

tests/views/shared-custom.blade.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@shared_custom

0 commit comments

Comments
 (0)