Installation
Add to composer.json:
"require": {
"da/less-bundle": "dev-master"
}
Run:
composer update
Register Bundle
In AppKernel.php (dev environment recommended):
$bundles[] = new Da\LessBundle\DaLessBundle();
Configure Routes
Add to routing_dev.yml:
DaLessBundle:
resource: "@DaLessBundle/Controller/"
type: annotation
prefix: /
Set Permissions
In config.yml:
da_less:
roles: [ROLE_ADMIN] # Restrict to admins
Update Assets
php app/console assets:install --symlink
/less (or configured route) to access the compilation interface..less file via the form or configure a .less.yml file for automated compilation.Access Interface
Visit /less (or configured route) with ROLE_ADMIN (or allowed role).
Upload & Compile
.less file.web/css/).Integration with Twig Reference the compiled CSS in your templates:
<link rel="stylesheet" href="{{ asset('css/compiled.css') }}">
Create Config File
Define a .less.yml file in your project root (e.g., config/less.yml):
files:
- { input: 'src/Resources/assets/less/style.less', output: 'web/css/style.css' }
Trigger Compilation Use the console command:
php app/console less:compile
Or integrate into a build script (e.g., post-install-cmd in composer.json):
"scripts": {
"post-install-cmd": [
"php app/console less:compile"
]
}
Cache Management Clear cache after changes:
php app/console cache:clear
DaLessBundle alongside Assetic for hybrid workflows (e.g., compile LESS in dev, use Assetic filters in prod).DaLessBundle for legacy LESS files while migrating new assets to Webpack.less.compile events (see Extension Points).Permission Denied
/less despite correct roles config.ROLE_ADMIN).ROLE_ADMIN is properly assigned in your security setup (e.g., security.yml).Output Directory Missing
config.yml:
da_less:
output_dir: "%kernel.root_dir%/../web/build/css"
Console Command Fails
less:compile throws errors about missing dependencies.lessphp/lessphp is installed (bundle depends on it):
composer require lessphp/lessphp
Symlink Issues (Windows)
assets:install fails on Windows.php app/console assets:install
Enable Debug Mode
Set da_less.debug: true in config.yml to log compilation errors to var/log/dev.log.
Check Compilation Logs
Inspect var/log/less.log for detailed output (ensure logging is configured in app/config/config.yml):
monolog:
handlers:
main:
type: stream
path: "%kernel.logs_dir%/less.log"
level: debug
Role Bypass in Production
roles: [anonymous] in production is a security risk. Use environment-specific configs:
# config_dev.yml
da_less:
roles: [anonymous]
# config_prod.yml
da_less:
roles: [ROLE_ADMIN]
File Watching
nodemon or integrate with Symfony’s debug:cache-clear in dev.Custom Compilation Logic
Override the compiler service by defining your own in services.yml:
services:
da_less.compiler:
class: AppBundle\Service\CustomLessCompiler
arguments: ["@da_less.compiler"]
tags:
- { name: da_less.compiler }
Event Listeners
Listen to compilation events (e.g., less.compile.start, less.compile.end) in services.yml:
services:
app.less_listener:
class: AppBundle\EventListener\LessCompileListener
tags:
- { name: kernel.event_listener, event: less.compile.start, method: onCompileStart }
Pre/Post-Processors
Extend the compiler pipeline by implementing Da\LessBundle\Compiler\LessProcessorInterface and registering it:
services:
app.less_processor:
class: AppBundle\Compiler\CustomLessProcessor
tags:
- { name: da_less.less_processor }
How can I help you explore Laravel packages today?