brunschgi/terrific-core-bundle
Installation Run:
composer require brunschgi/terrific-core-bundle:^1.0
Register the bundle in config/bundles.php (Laravel 5.4+) or AppKernel.php (older versions):
// config/bundles.php
return [
// ...
Brunschgi\TerrificCoreBundle\TerrificCoreBundle::class => ['all' => true],
];
First Use Case: Asset Optimization
TerrificCoreBundle integrates with Assetic to provide Terrific-specific filters (e.g., for CSS/JS minification, source maps, or vendor prefixing). Start by configuring Assetic in config/packages/assetic.yaml (Symfony) or app/config/config.yml (Laravel <5.4):
assetic:
filters:
terrific_css:
class: Brunschgi\TerrificCoreBundle\Assetic\Filter\TerrificCssFilter
terrific_js:
class: Brunschgi\TerrificCoreBundle\Assetic\Filter\TerrificJsFilter
Basic Frontend Structure
The bundle assumes a Terrific Concept-compliant structure. Create a web/ directory with:
web/
├── css/
│ ├── app.css
│ └── vendors/
├── js/
│ ├── app.js
│ └── vendors/
└── fonts/
Use Assetic to compile assets in your Twig templates:
{% stylesheets
'css/app.css'
filter='terrific_css'
output='css/compiled.css'
%}
<link rel="stylesheet" href="{{ asset_url }}">
{% endstylesheets %}
Modular Asset Management
web/js/vendors/ and web/css/vendors/.web/css/app.css and web/js/app.js.php bin/console assetic:dump (Symfony) or php artisan assetic:dump (Laravel) to compile assets.Terrific-Specific Features
terrific_css/terrific_js filters to auto-prefix vendor classes (e.g., .btn → .vendor-btn).filters:
terrific_css:
debug: true # Generates source maps
Integration with TerrificComposerBundle
TerrificComposerBundle, leverage its automatic vendor asset loading to avoid manual web/ directory management:
composer require brunschgi/terrific-composer-bundle
config/packages/terrific_composer.yaml:
terrific_composer:
enabled: true
output_dir: '%kernel.project_dir%/web'
php bin/console server:run) or Laravel’s php artisan serve with Assetic’s --watch flag for live updates:
php bin/console assetic:watch
config/packages/assetic_{env}.yaml (e.g., disable minification in dev):
# config/packages/assetic_dev.yaml
filters:
terrific_css:
minify: false
Assetic Configuration Conflicts
SymfonyAsseticBundle), the terrific_* filters may not apply.assetic.yaml:
assetic:
filters:
terrific_css: ~ # Overrides existing CSS filters
terrific_js: ~ # Overrides existing JS filters
Dev vs. Prod Builds
assetic:dump --env=prod) leads to uncompiled CSS/JS.mix (if using Webpack) for production builds.Terrific Concept Assumptions
web/ structure. Deviations (e.g., custom asset paths) may break filters.TerrificCssFilter/TerrificJsFilter to support custom paths:
// src/Assetic/Filter/CustomTerrificFilter.php
namespace App\Assetic\Filter;
use Brunschgi\TerrificCoreBundle\Assetic\Filter\TerrificCssFilter;
class CustomTerrificFilter extends TerrificCssFilter {
protected function getVendorPath() {
return $this->getContext()->getParameter('custom_vendor_path');
}
}
Filter Not Applying?
Check if the filter is registered in Assetic’s dump output:
php bin/console assetic:dump --debug
Look for terrific_css/terrific_js in the compiled asset headers.
Prefixing Issues
If classes aren’t prefixed correctly, verify the filter’s getVendorPrefix() method (extend the filter if needed):
// Override in a custom filter
public function getVendorPrefix() {
return 'myapp_'; // Custom prefix
}
Custom Filters Extend the base filters to add logic (e.g., auto-versioning):
// src/Assetic/Filter/VersionedTerrificFilter.php
use Brunschgi\TerrificCoreBundle\Assetic\Filter\TerrificCssFilter;
class VersionedTerrificFilter extends TerrificCssFilter {
public function filterLoad() {
$content = parent::filterLoad();
return $this->addVersionHash($content);
}
private function addVersionHash($content) {
return $content . "\n/*! Version: " . filemtime($this->getPath()) . " */";
}
}
Asset Path Overrides Use dependency injection to override paths:
# config/services.yaml
services:
Brunschgi\TerrificCoreBundle\Assetic\Filter\TerrificCssFilter:
arguments:
$vendorPath: '%kernel.project_dir%/custom_vendors'
Twig Extensions Add custom Twig functions for dynamic asset loading:
// src/Twig/AppExtension.php
namespace App\Twig;
use Brunschgi\TerrificCoreBundle\TerrificCoreBundle;
class AppExtension extends \Twig\Extension\AbstractExtension {
public function getFunctions() {
return [
new \Twig\TwigFunction('terrific_asset', [$this, 'getTerrificAsset']),
];
}
public function getTerrificAsset($path) {
return $this->env->getExtension('assetic')->getAssetUrl($path);
}
}
Use in Twig:
<link rel="stylesheet" href="{{ terrific_asset('css/app.css') }}">
How can I help you explore Laravel packages today?