Installation
composer require cvepdb-cms/theme-lumen
Ensure your Laravel/Lumen project meets the package's PHP version requirements (check composer.json of the package).
Publish Assets
php artisan vendor:publish --provider="Cvepdb\ThemeLumen\ThemeLumenServiceProvider" --tag=public
This copies the Lumen theme assets (CSS, JS, views) to public/vendor/theme-lumen.
First Use Case: Basic Theme Integration
config/app.php under providers:
Cvepdb\ThemeLumen\ThemeLumenServiceProvider::class,
bootstrap/app.php (Lumen) or AppServiceProvider (Laravel):
$app->register(\Cvepdb\ThemeLumen\ThemeLumenServiceProvider::class);
return view('theme-lumen::home'); // Assumes views are published to `resources/views/vendor/theme-lumen`
resources/views/vendor/theme-lumen.home.blade.php from the published assets to customize the homepage.namespace App\Http\Middleware;
use Closure;
use Cvepdb\ThemeLumen\Facades\Theme;
class ThemeMiddleware
{
public function handle($request, Closure $next)
{
Theme::set('lumen'); // Force 'lumen' theme
return $next($request);
}
}
bootstrap/app.php:
$app->middleware(['theme' => \App\Http\Middleware\ThemeMiddleware::class]);
php artisan vendor:publish --tag=theme-lumen-assets
<link rel="stylesheet" href="{{ asset('vendor/theme-lumen/css/theme.css') }}">
php artisan vendor:publish --tag=theme-lumen-config
config/theme-lumen.php:
'default' => 'lumen',
'paths' => [
'views' => resource_path('views/vendor/theme-lumen'),
],
use Cvepdb\ThemeLumen\Facades\Cms;
$content = Cms::get('homepage');
return view('theme-lumen::home', compact('content'));
Asset Paths
public/vendor/theme-lumen directory exists and permissions are correct.php artisan view:clear
php artisan config:clear
View Naming Conflicts
home.blade.php). Use unique names or prefixes.Lumen vs. Laravel Compatibility
ThemeLumenServiceProvider is registered correctly and that the Theme facade is available globally.Caching Issues
'cache' => [
'enabled' => env('APP_DEBUG') === false,
],
in config/theme-lumen.php.public/vendor/theme-lumen and resources/views/vendor/theme-lumen.config/theme-lumen.php:
'debug' => true,
This logs theme-related events to storage/logs/lumen-theme.log.Theme::set() fails, ensure the facade is registered in config/app.php:
'aliases' => [
'Theme' => Cvepdb\ThemeLumen\Facades\Theme::class,
],
Custom Directives
Extend Blade directives in AppServiceProvider:
Blade::directive('themeAsset', function ($expression) {
return "<?php echo asset('vendor/theme-lumen/{$expression}'); ?>";
});
Usage in views:
<img src="{{ themeAsset('images/logo.png') }}">
Theme Events Listen for theme-switch events:
Theme::on('switch', function ($theme) {
Log::info("Switched to theme: {$theme}");
});
Dynamic Partial Views Load partials dynamically:
$partial = Theme::partial('header');
echo $partial;
How can I help you explore Laravel packages today?