AssetComposerBundle is a Symfony bundle that helps you manage and serve assets directly from the vendor directory. It ensures all files are kept up-to-date by leveraging file modification timestamps for cache busting.
- Manage CSS/JS assets via Composer packages
- Automatic versioning using file timestamps
- Simple integration with Twig templates
- Supports production/dev-only assets via
assetcomposer.json - Symfony 6 & 7 compatible
- PHP 8.1 or higher
- Symfony Framework 6.4 or 7.0
Use Composer to install the bundle:
composer require jbsnewmedia/asset-composer-bundlecomposer require twbs/bootstrap
composer require components/font-awesome
composer require avalynx/avalynx-alert{% do addAssetComposer('twbs/bootstrap/dist/css/bootstrap.css') %}
{% do addAssetComposer('components/font-awesome/css/all.css') %}
{% do addAssetComposer('avalynx/avalynx-alert/dist/css/avalynx-alert.css') %}
{% do addAssetComposer('avalynx/avalynx-alert/dist/js/avalynx-alert.js') %}You can also use local assets stored in your project's assets/ directory. Use the namespace app and the package assets:
{% do addAssetComposer('app/assets/css/custom.css') %}
{% do addAssetComposer('app/assets/js/custom.js') %}The files must be located locally at %kernel.project_dir%/assets/css/custom.css and %kernel.project_dir%/assets/js/custom.js respectively.
Example file structure:
your-project/
├── assets/
│ ├── css/
│ │ └── custom.css
│ └── js/
│ └── custom.js
├── composer.json
└── ...
<!DOCTYPE html>
<html>
<head>
{% block stylesheets %}
{{ renderAssetComposerStylesheets() }}
{% endblock %}
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}
{{ renderAssetComposerJavascripts() }}
{% endblock %}
{{ renderAssetComposerJavascripts('bottom') }}
</body>
</html>config/
├── routes.yaml
├── services.yaml
src/
├── Controller/
│ └── AssetComposerController.php
├── DependencyInjection/
│ ├── AssetComposerExtension.php
│ └── Configuration.php
├── Service/
│ └── AssetComposer.php
├── Twig/
│ └── AssetComposerExtension.php
├── AssetComposerBundle.php
You can create an assetcomposer.json file in your asset packages to define which files should be exposed:
{
"name": "library-name",
"files": [
"dist/css/styles.css",
"dist/js/scripts.js"
],
"files-dev": [
"src/css/dev-styles.css",
"src/js/dev-scripts.js"
]
}To maintain code quality, this project uses:
- PHP-CS-Fixer (ECS):
composer bin-ecs - PHPStan:
composer bin-phpstan - Rector:
composer bin-rector
Install and update tools using:
composer bin-ecs-install
composer bin-phpstan-install
composer bin-rector-install
composer bin-phpunit-installAll code adheres to modern PHP standards. Use the provided scripts to analyze and refactor the codebase:
composer bin-phpstan # Static analysis
composer bin-ecs # Coding standards (check)
composer bin-ecs-fix # Coding standards (fix)
composer bin-rector # Code transformation (dry-run)
composer bin-rector-process # Code transformation (apply)
composer test # Run tests
composer test-coverage # Run tests with coverageThis bundle is licensed under the MIT license. See the LICENSE file for more details.
Developed by Jürgen Schwind and other contributors.
Contributions are welcome! If you'd like to contribute, please contact us or fork the repository and submit a pull request with your changes or improvements.
If you have any questions, feature requests, or issues, please open an issue on our GitHub repository or submit a pull request.
Always up-to-date. Simple. Composer-native asset management.