У меня есть пара методов, которые объединяют множество CSS-ресурсов в один, минимизируют их и выгружают (кэшируют) в сгенерированное имя файла, например "/assetic/6bad22c.css".Я достигаю этого, используя следующее:
В настоящее время я использую AssetFactory
private static function getCssAssetFactory()
{
$fm = new FilterManager();
$fm->set('less', new Filter\LessphpFilter());
$fm->set('import', new Filter\CssImportFilter());
$fm->set('rewrite', new Filter\CssRewriteFilter());
$fm->set('min', new Filter\CssMinFilter());
$factory = new AssetFactory(self::getAssetBuildPath());
$factory->setFilterManager($fm);
return $factory;
}
и создаю Актив через
public static function dumpStylesheets()
{
$asset = self::getCssAssetFactory()->createAsset
( self::$stylesheets
, array
( 'less' // Less CSS Compiler
, 'import' // Solves @imports
, 'rewrite' // Rewrites Base URLs when moving to another URL
, 'min' // Minifies the script
)
, array('output' => 'assetic/*.css')
);
$cache = self::getAssetCache($asset);
self::getAssetWriter()->writeAsset($cache);
return self::basePath().'/'.$asset->getTargetPath();
}
Вот методы, на которые ссылаются:
private static function getAssetWriter()
{
if (is_null(self::$AssetWriter))
{
self::$AssetWriter = new AssetWriter(self::getAssetBuildPath());
}
return self::$AssetWriter;
}
private static function getAssetCache($asset)
{
return new AssetCache
( $asset
, new FilesystemCache(self::getAssetBuildPath().'/cache')
);
}
Никакой магии здесь пока нет.Моя проблема в том, что массив self::$stylesheets
, по определению 1014 *, просто содержит строки пути к активам.Но мне нужно , чтобы использовать настоящие Активные активы следующим образом:
self::$stylesheets = array
( new Asset\FileAsset('path/to/style.css')
, new Asset\StringAsset('.some-class {text-decoration: none;}');
, new Asset\HttpAsset('http://domain.tld/assets/style.css');
);
Но AssetFactory::createAsset()
не принимает свои собственные активы.Мне нужна возможность использовать StringAsset
, потому что мне нужно изменить некоторые значения в CSS / JS, на стороне сервера.
Есть ли другой способ добиться этого, кроме использования AssetFactory::createAsset()
?