Leon
app/Services/Theme/Theme.php gibi bir sınıf oluşturun:
<?php
namespace App\Services\Theme;
class Theme
{
public function asset($path, $secure = null): string
{
return app('url')->asset($this->getThemeResourcePath($path), $secure);
}
protected function getThemeResourcePath($resource = null): string
{
return sprintf("/theme/%s/%s",
config('ayar.siteayar.siteonyuz.site_tema.deger'),
trim($resource, '/')
);
}
}
app/Services/Theme/ThemeFacade.php sınıfını oluşturun:
<?php
namespace App\Services\Theme;
use Illuminate\Support\Facades\Facade;
class ThemeFacade extends Facade
{
protected static function getFacadeAccessor()
{
return 'theme';
}
}
config/app.php
içerisine, en alttaki Class Aliases bölümündeki aliases anahtarına kendi facade'ınızı tanımlayın:
'Theme' => \App\Services\Theme\ThemeFacade::class,
Kullandığınız service provider'ın register yöntemi içerisine binding yapın:
$this->app->bind('theme', function ($app) {
return new \App\Services\Theme\Theme;
});
Kullandığınız service provider'ın boot yöntemi içerisine Blade direktifi oluşturun:
Blade::directive('themeAsset', function ($expression) {
return "<?php echo Theme::asset($expression); ?>";
});
Artık Blade şablonları içinde şöyle yapabilirsiniz:
<img src="@themeAsset('images/designer.svg')" class="img-fluid" style="width: 500px;" alt="">
<!-- yada -->
<img src="{{ Theme::asset('images/designer.svg') }}" class="img-fluid" style="width: 500px;" alt="">
https://laravel.com/docs/7.x/container
https://laravel.com/docs/7.x/providers
https://laravel.com/docs/7.x/facades
https://laravel.com/docs/7.x/blade#extending-blade
---
PhpStorm kullanıyorsanız şu şekilde de @themeAsset direktifini tanımasını sağlayabilirsiniz: