vendor/assetic/README.md
author ymh <ymh.work@gmail.com>
Sun, 06 Nov 2011 23:44:37 +0100
changeset 27 1df556b2c0f9
parent 0 7f95f8617b0b
permissions -rwxr-xr-x
Correct memory problem
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
# Assetic ![project status](http://stillmaintained.com/kriswallsmith/assetic.png) #
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Assetic is an asset management framework for PHP.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
``` php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
use Assetic\Asset\AssetCollection;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
use Assetic\Asset\FileAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
use Assetic\Asset\GlobAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
$js = new AssetCollection(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
    new GlobAsset('/path/to/js/*'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
    new FileAsset('/path/to/another.js'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
// the code is merged when the asset is dumped
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
echo $js->dump();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
Assets
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
------
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
An Assetic asset is something with filterable content that can be loaded and
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
dumped. An asset also includes metadata, some of which can be manipulated and
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
some of which is immutable.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
| **Property** | **Accessor**    | **Mutator**   |
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
|--------------|-----------------|---------------|
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
| content      | getContent      | setContent    |
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
| mtime        | getLastModified | n/a           |
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
| source root  | getSourceRoot   | n/a           |
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
| source path  | getSourcePath   | n/a           |
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
| target path  | getTargetPath   | setTargetPath |
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
Filters
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
-------
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
Filters can be applied to manipulate assets.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
``` php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
use Assetic\Asset\AssetCollection;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
use Assetic\Asset\FileAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
use Assetic\Asset\GlobAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
use Assetic\Filter\LessFilter;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
use Assetic\Filter\Yui;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
$css = new AssetCollection(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
    new FileAsset('/path/to/src/styles.less', array(new LessFilter())),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    new GlobAsset('/path/to/css/*'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
), array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    new Yui\CssCompressorFilter('/path/to/yuicompressor.jar'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
// this will echo CSS compiled by LESS and compressed by YUI
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
echo $css->dump();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
The filters applied to the collection will cascade to each asset leaf if you
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
iterate over it.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
``` php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
foreach ($css as $leaf) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    // each leaf is compressed by YUI
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    echo $leaf->dump();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
The core provides the following filters in the `Assetic\Filter` namespace:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
 * `CoffeeScriptFilter`: compiles CoffeeScript into Javascript
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
 * `CssEmbedFilter`: embeds image data in your stylesheets
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
 * `CssImportFilter`: inlines imported stylesheets
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
 * `CssMinFilter`: minifies CSS
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
 * `CssRewriteFilter`: fixes relative URLs in CSS assets when moving to a new URL
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
 * `GoogleClosure\CompilerApiFilter`: compiles Javascript using the Google Closure Compiler API
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
 * `GoogleClosure\CompilerJarFilter`: compiles Javascript using the Google Closure Compiler JAR
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
 * `JpegoptimFilter`: optimize your JPEGs
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
 * `JpegtranFilter`: optimize your JPEGs
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
 * `LessFilter`: parses LESS into CSS (using less.js with node.js)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
 * `LessphpFilter`: parses LESS into CSS (using lessphp)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
 * `OptiPngFilter`: optimize your PNGs
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
 * `PngoutFilter`: optimize your PNGs
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
 * `CompassFilter`: Compass CSS authoring framework
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
 * `Sass\SassFilter`: parses SASS into CSS
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
 * `Sass\ScssFilter`: parses SCSS into CSS
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
 * `SprocketsFilter`: Sprockets Javascript dependency management
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
 * `StylusFilter`: parses STYL into CSS
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
 * `Yui\CssCompressorFilter`: compresses CSS using the YUI compressor
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
 * `Yui\JsCompressorFilter`: compresses Javascript using the YUI compressor
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
Asset Manager
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
-------------
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
An asset manager is provided for organizing assets.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
``` php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
use Assetic\AssetManager;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
use Assetic\Asset\FileAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
use Assetic\Asset\GlobAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
$am = new AssetManager();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
$am->set('jquery', new FileAsset('/path/to/jquery.js'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
$am->set('base_css', new GlobAsset('/path/to/css/*'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
The asset manager can also be used to reference assets to avoid duplication.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
``` php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
use Assetic\Asset\AssetCollection;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
use Assetic\Asset\AssetReference;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
use Assetic\Asset\FileAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
$am->set('my_plugin', new AssetCollection(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
    new AssetReference($am, 'jquery'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    new FileAsset('/path/to/jquery.plugin.js'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
)));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
Filter Manager
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
--------------
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
A filter manager is also provided for organizing filters.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
``` php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
use Assetic\FilterManager;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
use Assetic\Filter\Sass\SassFilter;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
use Assetic\Filter\Yui;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
$fm = new FilterManager();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
$fm->set('sass', new SassFilter('/path/to/parser/sass'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
$fm->set('yui_css', new Yui\CssCompressorFilter('/path/to/yuicompressor.jar'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
Asset Factory
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
-------------
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
If you'd rather not create all these objects by hand, you can use the asset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
factory, which will do most of the work for you.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
``` php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
use Assetic\Factory\AssetFactory;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
$factory = new AssetFactory('/path/to/asset/directory/');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
$factory->setAssetManager($am);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
$factory->setFilterManager($fm);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
$factory->setDebug(true);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
$css = $factory->createAsset(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
    '@reset',         // load the asset manager's "reset" asset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
    'css/src/*.scss', // load every scss files from "/path/to/asset/directory/css/src/"
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
), array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
    'scss',           // filter through the filter manager's "scss" filter
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
    '?yui_css',       // don't use this filter in debug mode
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
echo $css->dump();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
Prefixing a filter name with a question mark, as `yui_css` is here, will cause
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
that filter to be omitted when the factory is in debug mode.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
Caching
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
-------
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
A simple caching mechanism is provided to avoid unnecessary work.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
``` php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
use Assetic\Asset\AssetCache;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
use Assetic\Asset\FileAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
use Assetic\Cache\FilesystemCache;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
use Assetic\Filter\Yui;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
$yui = new Yui\JsCompressorFilter('/path/to/yuicompressor.jar');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
$js = new AssetCache(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
    new FileAsset('/path/to/some.js', array($yui)),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
    new FilesystemCache('/path/to/cache')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
// the YUI compressor will only run on the first call
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
$js->dump();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
$js->dump();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
$js->dump();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
Static Assets
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
-------------
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
Alternatively you can just write filtered assets to your web directory and be
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
done with it.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
``` php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
use Assetic\AssetWriter;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
$writer = new AssetWriter('/path/to/web');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
$writer->writeManagerAssets($am);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
Twig
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
----
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
To use the Assetic [Twig][3] extension you must register it to your Twig
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
environment:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
``` php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
$twig->addExtension(new AsseticExtension($factory, $debug));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
Once in place, the extension exposes a stylesheets and a javascripts tag with a syntax similar
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
to what the asset factory uses:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
``` html+jinja
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
{% stylesheets '/path/to/sass/main.sass' filter='sass,?yui_css' output='css/all.css' %}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
{% endstylesheets %}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
This example will render one `link` element on the page that includes a URL
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
where the filtered asset can be found.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
When the extension is in debug mode, this same tag will render multiple `link`
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
elements, one for each asset referenced by the `css/src/*.sass` glob. The
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
specified filters will still be applied, unless they are marked as optional
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
using the `?` prefix.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
This behavior can also be triggered by setting a `debug` attribute on the tag:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
``` html+jinja
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
{% stylesheets 'css/*' debug=true %} ... {% stylesheets %}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
These assets need to be written to the web directory so these URLs don't
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
return 404 errors.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
``` php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
use Assetic\AssetWriter;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
use Assetic\Extension\Twig\TwigFormulaLoader;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
use Assetic\Extension\Twig\TwigResource;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
use Assetic\Factory\LazyAssetManager;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
$am = new LazyAssetManager($factory);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
// enable loading assets from twig templates
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
$am->setLoader('twig', new TwigFormulaLoader($twig));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
// loop through all your templates
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
foreach ($templates as $template) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
    $resource = new TwigResource($twigLoader, $template);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
    $am->addResource($resource, 'twig');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
$writer = new AssetWriter('/path/to/web');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
$writer->writeManagerAssets($am);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
```
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
---
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
Assetic is based on the Python [webassets][1] library (available on
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
[GitHub][2]).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
[1]: http://elsdoerfer.name/docs/webassets
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
[2]: https://github.com/miracle2k/webassets
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
[3]: http://www.twig-project.org