У меня есть класс, который использует Assetic для генерации некоторых файлов css на диск. Я перейду прямо в код.Assetic создает несколько файлов с одним контентом
В моем заголовке макета, что я делаю что-то вроде этого:
$assetify = new Assetify();
$assetify->setDebug(true);
$assetify->setAssetDirectory(BASE_DIR . '/public/assets');
$assetify->setOutputDirectory(BASE_DIR . '/public/assets/generated');
$assetify
->addStylesheet('/assets/css/bootstrap-2.3.2.css')
->addStylesheet('/assets/css/select2-3.4.3.css')
->addStylesheet('/assets/css/main.css');
echo $assetify->dump();
Мой класс "Assetify" проходит через этот Assetic. Я вставить то, что я надеюсь, что только соответствующие части из функции dump()
:
// The Asset Factory allows us to not have to do all the hard work ourselves.
$factory = new AssetFactory($this->assetDirectory, $this->debug);
$factory->setDefaultOutput('/generated/*.css');
// The Filter Manager allows us to organize filters for the asset handling.
// For other filters, see: https://github.com/kriswallsmith/assetic
$fm = new FilterManager();
$fm->set('yui_css', new Yui\CssCompressorFilter('/usr/local/bin/yuicompressor-2.4.7.jar'));
$fm->set('yui_js', new Yui\JsCompressorFilter('/usr/local/bin/yuicompressor-2.4.7.jar'));
$factory->setFilterManager($fm);
// The Asset Manager allows us to keep our assets organized.
$am = new AssetManager();
$factory->setAssetManager($am);
// The cache-busting worker prefixes every css with what amounts to a version number.
$factory->addWorker(new CacheBustingWorker());
$assetCollection = array();
foreach ($assetGroups as $assetGroup) {
foreach ($assetGroup as $media => $items) {
$fileCollection = array();
foreach ($items as $item) {
// Add this asset to the asset collection.
$fileCollection[] = new FileAsset($item);
}
$assetCollection[] = new AssetCollection($fileCollection);
}
}
$assetCollection = new AssetCollection($assetCollection);
$am->set('base_css', $assetCollection);
// Generate the required assets. Prefixing a filter name with a question mark
// will cause that filter to be omitted in debug mode.
$asset = $factory->createAsset(
array('@base_css'),
array('?yui_css')
);
// Configure an internal file system cache so we don't regenerate this file on every load.
$cache = new AssetCache(
$asset,
new FilesystemCache($this->outputDirectory)
);
// And generate static versions of the files on disk.
$writer = new AssetWriter($this->assetDirectory);
$writer->writeAsset($cache);
Это создает два файла, 87229eb-f47a352.css
и a37c1589762f39aee5bd24e9405dbdf9
. Содержимое файлов одинаково. Кажется, что файл 87229eb-f47a352.css
генерируется каждый раз, а другой файл не восстанавливается, если содержимое файлов не изменяется (это то, что я хотел бы). Если я прокомментирую $writer->writeAsset($cache)
, файлы не будут записаны на диск.
Какая очевидная конфигурация мне не хватает? Я ценю помощь, спасибо.
вы получили эту работу? Я пытаюсь сделать что-то подобное. Ваш класс выглядит действительно полезным, могли бы вы поделиться им? –
Мне очень жаль, но я никогда не видел уведомления об этом до сегодняшнего дня! Почти два года спустя. Святое дерьмо. Большое вам спасибо за ваш ответ, который я принял. Я никогда не думал об этом, и мне пришлось двигаться дальше, поэтому я закончил тем, что мой скрипт просто удалил каждый нерасширенный файл после поколения. – Vic