私は、多くのCSS資産を1つに結合し、それらを縮小してダンプする方法をいくつか持っています"/assetic/6bad22c.css"のような生成されたファイル名にキャッシュされます。私は、次を使用することによってこれを実現:
現在、私はここで
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();
}
経由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;
}
を使用して資産を作成するには、参照メソッドです:
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')
);
}
ここまでの魔法はありません。私の問題は、配列definitionによるself::$stylesheets
の配列には、アセットへのパス文字列だけが含まれているということです。しかし、私はこの方法のような本当のAssetic資産を使用するが必要:
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、serversideのいくつかの値を変更する必要があるからです。
AssetFactory::createAsset()
以外でこれを達成する別の方法はありますか?
どうなりますか?間違いはありますか?あなたは何の結果を期待していますか?私はAssetFactoryに精通していませんが、より多くの情報が参考になります。 – Jason
いいえ、私のメソッドは正常に動作します。エラーはありません。しかし、私は元のAssetic資産でそれらを拡張する必要があります。 'AssetFactory :: createAsset()'メソッドにパス文字列の代わりにAssetsを追加しようとすると、次のエラーで失敗します:__致命的なエラー:Assetic \ Asset \ FileAsset型のオブジェクトを配列として使用できません。 ] \ lib \ vendor \ Assetic \ src \ Assetic \ Factory \ AssetFactory.phpの行270__には含まれていません。 – kernel
私たちはどこかに行っていると思います。私が何を扱っているかを少し見てみました。 createAssetメソッド*は文字列または文字列を消費しなければなりません。また、任意の型のオブジェクトは常に失敗します。あなたの入力を処理するとき、オブジェクトのparseInput()を呼び出し、行270のエラーに従って、入力を配列として扱います。文字列では、最初の文字にアクセスしているだけです。オブジェクトでは、致命的なエラーが発生します。あなたはあなたが望むことをすることはできません。なぜあなたは文字列ではなくAssetic Assetsを渡す必要がありますか? – Jason