Installation:
composer require kevinpapst/adminlte-bundle:^3.0
Copy default config:
mkdir -p config/packages && cp vendor/kevinpapst/adminlte-bundle/config/packages/admin_lte.yaml config/packages/
Enable Bundle:
Add to config/bundles.php:
KevinPapst\AdminLTEBundle\AdminLTEBundle::class => ['all' => true],
First Use Case:
Extend your base template (templates/base.html.twig) with AdminLTE’s layout:
{% extends 'adminlte:layout.html.twig' %}
{% block title %}My App{% endblock %}
{% block body %}{% endblock %}
Verify Assets: Ensure Webpack Encore is configured (if using assets). Run:
yarn install && yarn build
Layout Customization:
adminlte:layout.html.twig (e.g., title, body, sidebar, content_header).{% block sidebar %}
{{ knp_menu('menu.main', {
'rootLink': {'route': 'home'},
'depth': 2,
'template': 'adminlte/menu.html.twig'
}) }}
{% endblock %}
Dynamic Menu Integration:
KNPMenuBundle for dynamic menus. Configure in config/packages/knp_menu.yaml:
knp_menu:
twig:
template: 'adminlte/menu.html.twig'
services.yaml):
App\Menu\MainMenuBuilder:
tags: ['knp_menu.menu_builder', { 'method': 'createMainMenu', 'alias': 'menu.main' }]
FOSUserBundle Integration:
templates/security/login.html.twig):
{% extends 'adminlte/security_layout.html.twig' %}
{% block body %}
{{ form_start(form) }}
{{ form_widget(form._token) }}
{{ form_widget(form.email) }}
{{ form_widget(form.password) }}
<button type="submit">{{ 'security.login.submit'|trans }}</button>
{{ form_end(form) }}
{% endblock %}
Asset Management:
webpack.config.js) to process AdminLTE assets:
Encore
.addEntry('admin', './assets/admin.js')
.splitEntry('./assets/admin.js')
.enableSassLoader()
.enablePostCssLoader();
{{ encore_entry_link_tags('admin') }}
{{ encore_entry_script_tags('admin') }}
Event-Driven Customization:
AdminLTEEvents::PRE_RENDER) to modify layout dynamically:
// src/EventListener/AdminLTEListener.php
public function onPreRender(AdminLTEEvent $event) {
$event->setLayout('custom_layout');
}
services.yaml:
App\EventListener\AdminLTEListener:
tags: ['kernel.event_listener', { 'event': 'adminlte.pre_render', 'method': 'onPreRender' }]
Deprecated Features:
AvanzuAdminThemeBundle patterns (e.g., admin_theme Twig blocks). Use adminlte blocks instead.{% block admin_theme_body %} with {% block body %}.Webpack Encore Conflicts:
webpack.config.js is configured before installing the bundle to avoid asset conflicts.yarn build && php bin/console cache:clear
FOSUserBundle Overrides:
login.html.twig) must extend adminlte/security_layout.html.twig, not base.html.twig.config/routes.yaml:
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
prefix: /admin
type: adminlte
Menu Builder Quirks:
adminlte/menu.html.twig as a base.{{ dump(knp_menu('menu.main')) }}
Translation Issues:
config/packages/translation.yaml:
translation:
paths: ['%kernel.project_dir%/translations']
translations/messages.en.yaml:
adminlte:
layout_title: 'My App Dashboard'
Layout Rendering:
adminlte:layout.html.twig is being extended. Use Twig’s {% debug %} block:
{% debug %}
Event Dispatching:
public function onPreRender(AdminLTEEvent $event) {
\Log::info('AdminLTE event triggered', ['layout' => $event->getLayout()]);
}
Asset Loading:
rm -rf var/cache/* && yarn build
Configuration Overrides:
admin_lte.yaml settings. Use the default config as a reference:
admin_lte:
layout_theme: 'light-blue' # Default: 'skin-blue'
brand_text: 'My App'
Custom Layouts:
vendor/kevinpapst/adminlte-bundle/Resources/views/layout.html.twig to templates/adminlte/layout_custom.html.twig.admin_lte.yaml:
admin_lte:
layout: 'layout_custom'
Dynamic Content Sidebar:
control-sidebar block to add dynamic content (e.g., notifications):
{% block control-sidebar %}
<div class="control-sidebar-content">
<ul class="control-sidebar-menu">
<li><a href="#"><i class="fas fa-comments"></i> Messages</a></li>
</ul>
</div>
{% endblock %}
Theming:
assets/admin.scss:
$skin-color: #3c8dbc;
@import '~admin-lte/dist/css/skins/_skin-blue.scss';
Custom Commands:
AdminLTE:Assets:Install) by creating a custom command:
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class CustomAdminLTECommand extends Command {
protected function execute(InputInterface $input, OutputInterface $output) {
// Custom logic
}
}
services.yaml:
App\Command\CustomAdminLTECommand:
tags: ['console.command']
How can I help you explore Laravel packages today?