Install the Bundle
composer require cwd/adminmetronic-bundle
Ensure your composer.json includes the package under require.
Copy Metronic Assets
assets/, sass/, and templates/ folders into your Laravel project’s public/ directory.public/
├── assets/ # Metronic JS/CSS assets
├── sass/ # SCSS source files
└── templates/ # Admin4 template files
Enable the Bundle
Add to config/app.php under providers:
Cwd\AdminMetronicBundle\CwdAdminMetronicBundle::class,
Publish the bundle’s assets (if needed):
php artisan vendor:publish --provider="Cwd\AdminMetronicBundle\CwdAdminMetronicBundle" --tag=assets
First Use Case: Basic Admin Layout
Extend the bundle’s base template in resources/views/layouts/app.blade.php:
@extends('AdminMetronicBundle::base')
@section('content')
<!-- Your admin content here -->
@endsection
Extend Metronic’s Base Template:
Use @extends('AdminMetronicBundle::base') in your views to inherit Metronic’s layout (header, sidebar, footer).
Override sections like content, sidebar, or scripts:
@section('sidebar')
@include('partials.admin-sidebar')
@endsection
Dynamic Sidebars:
Use Metronic’s built-in sidebar components (e.g., AdminMetronicBundle::sidebar) and customize via Twig/Laravel Blade:
@include('AdminMetronicBundle::sidebar', ['items' => $menuItems])
SCSS Compilation: The bundle assumes you’re using Metronic’s SCSS files. Integrate with Laravel Mix or Vite:
// webpack.mix.js
mix.sass('resources/sass/admin.scss', 'public/css');
Link the compiled CSS in your layout:
<link href="{{ asset('css/admin.css') }}" rel="stylesheet">
JavaScript Dependencies:
Load Metronic’s JS via the scripts section:
@section('scripts')
@parent // Loads Metronic's base scripts
<script src="{{ asset('assets/global/scripts/datatable.js') }}"></script>
@endsection
Admin Routes:
Prefix admin routes in routes/web.php:
Route::prefix('admin')->middleware(['auth', 'admin'])->group(function () {
Route::get('/dashboard', 'AdminController@dashboard')->name('admin.dashboard');
});
Use Metronic’s template files for views (e.g., templates/admin/dashboard.html.twig → convert to Blade).
Dynamic Views: Map Metronic’s template files to Laravel routes:
Route::get('/users', function () {
return view('AdminMetronicBundle::admin/users', ['users' => User::all()]);
});
Authentication: Use Laravel’s auth scaffolding and override Metronic’s login template:
@auth
@extends('AdminMetronicBundle::base')
@section('content')
@include('auth.login')
@endsection
@endauth
Form Handling:
Leverage Metronic’s form components (e.g., AdminMetronicBundle::form) in Blade:
{!! Form::open(['route' => 'admin.users.store']) !!}
@include('AdminMetronicBundle::form/fields', ['fields' => $formFields])
{!! Form::submit('Save') !!}
{!! Form::close() !!}
Outdated Template Support:
Asset Path Assumptions:
public/assets/, public/sass/, etc. Misplaced files break rendering.config/admin_metronic.php (if published) or override in your layout.Twig vs. Blade:
{{ variable }}). Mixing with Blade may cause issues.@php echo $variable @endphp for Twig variables in Blade or rewrite templates.No Active Development:
Broken CSS/JS:
Check browser console for 404s on public/assets/.... Ensure files are copied correctly.
ls public/assets/ -R # Verify structure
Template Overrides Not Working: Clear cached views:
php artisan view:clear
php artisan cache:clear
Sidebar/Layout Issues: Metronic’s JS relies on specific HTML structure. Inspect the rendered source to match the template’s expectations.
Custom Templates:
public/templates/ and extend the bundle’s TemplateEngine service.public/templates/admin/custom.html.twig and override the base template path.Dynamic Configuration: Publish the config:
php artisan vendor:publish --provider="Cwd\AdminMetronicBundle\CwdAdminMetronicBundle" --tag=config
Customize config/admin_metronic.php for:
Laravel Mix/Vite Integration:
Override the default asset pipeline by extending the bundle’s AssetManager:
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->extend('admin_metronic.asset_manager', function ($manager) {
$manager->setJsPath('path/to/custom/js');
return $manager;
});
}
Use Metronic’s Components: Leverage pre-built components (e.g., datatables, charts) via their JS/CSS:
<!-- Example: DataTable -->
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover" id="sample_1">
<!-- Data here -->
</table>
</div>
<script src="{{ asset('assets/global/scripts/datatable.js') }}"></script>
<script>
jQuery(document).ready(function() {
$('#sample_1').dataTable();
});
</script>
Dark/Light Mode: Metronic supports themes. Toggle via CSS classes:
<body class="skin-default"> <!-- Default theme -->
<body class="skin-dark"> <!-- Dark theme -->
Localization:
Metronic includes RTL support. Add dir="rtl" to <html> and load RTL assets:
<html dir="rtl">
<link href="{{ asset('assets/global/plugins/rtl/rtl.css') }}" rel="stylesheet">
How can I help you explore Laravel packages today?