Assets Helper

The assets helper’s main purpose is to make your application more portable by generating asset paths:

<link href="<?php echo $view['assets']->getUrl('css/style.css') ?>" rel="stylesheet">

<img src="<?php echo $view['assets']->getUrl('images/logo.png') ?>">

The assets helper can then be configured to render paths to a CDN or modify the paths in case your assets live in a sub-directory of your host (e.g. http://example.com/app).

Configure Paths

By default, the assets helper will prefix all paths with a slash. You can configure this by passing a base assets path as the first argument of the constructor:

use Symfony\Component\Templating\Helper\AssetsHelper;

// ...
$templateEngine->set(new AssetsHelper('/foo/bar'));

Now, if you use the helper, everything will be prefixed with /foo/bar:

<img src="<?php echo $view['assets']->getUrl('images/logo.png') ?>">
<!-- renders as:
<img src="/foo/bar/images/logo.png">
-->

Absolute Urls

You can also specify a URL to use in the second parameter of the constructor:

// ...
$templateEngine->set(new AssetsHelper(null, 'http://cdn.example.com/'));

Now URLs are rendered like http://cdn.example.com/images/logo.png.

Versioning

To avoid using the cached resource after updating the old resource, you can use versions which you bump every time you release a new project. The version can be specified in the third argument:

// ...
$templateEngine->set(new AssetsHelper(null, null, '328rad75'));

Now, every URL is suffixed with ?328rad75. If you want to have a different format, you can specify the new format in fourth argument. It’s a string that is used in sprintf. The first argument is the path and the second is the version. For instance, %s?v=%s will be rendered as /images/logo.png?v=328rad75.

Multiple Packages

Asset path generation is handled internally by packages. The component provides 2 packages by default:

You can also use multiple packages:

use Symfony\Component\Templating\Asset\PathPackage;

// ...
$templateEngine->set(new AssetsHelper());

$templateEngine->get('assets')->addPackage('images', new PathPackage('/images/'));
$templateEngine->get('assets')->addPackage('scripts', new PathPackage('/scripts/'));

This will setup the assets helper with 3 packages: the default package which defaults to / (set by the constructor), the images package which prefixes it with /images/ and the scripts package which prefixes it with /scripts/.

If you want to set another default package, you can use setDefaultPackage().

You can specify which package you want to use in the second argument of getUrl():

<img src="<?php echo $view['assets']->getUrl('foo.png', 'images') ?>">
<!-- renders as:
<img src="/images/foo.png">
-->

Custom Packages

You can create your own package by extending Package.