NOTE: This functionality of this bundle is now in Symfony Core.
This bundle adds the twig function manifest_asset
that is a wrapper for the native asset
but looks for a configured manifest json file to map assets. This file can be generated using
Gulp and the gulp-rev Gulp plugin.
If you have used Laravel with Laravel Elixir
the manifest_asset
function is similar to Laravel's elixir
function.
Download:
composer require zenstruck/asset-manifest-bundle
Enabled bundle:
//app/AppKernel.php
//...
public function registerBundles() {
$bundles = [
//...
new Zenstruck\AssetManifestBundle\ZenstruckAssetManifestBundle(),
//...
];
//...
}
//...
By default, no manifest is configured. In development, this is probably ideal. For production, you will want to configure a manifest file to map your assets.
#app/config/config_prod.yml
#...
zenstruck_asset_manifest:
manifest_file: "%kernel.root_dir%/../web/assets/manifest.json"
#...
asset
should be replaced by manifest_asset
in twig files.
Here an example:
<!DOCTYPE html>
<html>
<head>
<title>My page title</title>
<meta charset="utf-8">
<link rel="stylesheet" href="{{ manifest_asset('assets/main.css') }}">
</head>
<body>
My page content
</body>
</html>
Note: If no manifest file is configured, the manifest_asset
behaves exactly like the native
asset
function.
Say your public (web) folder looks as follows:
.
├── assets
│ ├── build
│ │ ├── css
│ │ │ └── app-8f07f52635.css
│ │ └── rev-manifest.json
│ └── css
│ └── app.css
And your rev-manifest.json
file looks as follows:
{
"css/app.css": "css/app-8f07f52635.css"
}
Using the manifest_asset
twig function, you would pass assets/css/app.css
but this wouldn't map
correctly. To fix this, you can add prefixes to your config.yml
:
zenstruck_asset_manifest:
manifest_file: "%kernel.root_dir%/../web/assets/build/manifest.json"
prefix:
source: assets/
destination: assets/build/
Now, assets/css/app.css
would properly map to assets/build/css/app-8f07f52635.css
.
zenstruck_asset_manifest:
manifest_file: ~
prefix:
source: ~
destination: ~