3

ご覧のとおり、AsseticはCacheBustingである程度の進歩を遂げました:
https ://github.com/kriswallsmith/assetic#cache-busting

しかし、私はこれをどのように使うべきか本当に理解していません。
これは小枝の中から使用できますか?

{% stylesheets 'bundles/mybundle/css/fonts.css' 
               'bundles/mybundle/css/style.css'
               'bundles/mybundle/css/screen.css'
               filter='cssrewrite'
 %}
    <link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
{% endstylesheets %}

そして、通常のassetic:dumpコマンドで?

CacheBustingWorkerをどこにフックする必要がありますか?

4

5 に答える 5

23

キャッシュバスターはsymfony/AsseticBundleの一部になりました(バージョン> = 2.5.0)。

次のようにcomposer.jsonのAsseticBundleバージョンを変更します。

"symfony/assetic-bundle": "2.5.0",

そして、そのようなconfig.ymlファイル内のアセットのキャッシュバスティングをアクティブにします

assetic:
    workers:
        cache_busting: ~

私のJSファイルは次のようになっています。

web/bundles/js/projectname-876f9ee.js

https://github.com/symfony/AsseticBundle/pull/119#issuecomment-28877145を参照してください

于 2014-10-22T12:54:35.660 に答える
5

私は最近、同じことをする方法を探しています。

私が思いついた解決策は、SymfonyのAssetFactoryを自分のクラスでオーバーライドし、そのコンストラクターにCacheBustingWorkerを追加することでした。基本的に、次のようなファイルを作成します。

<?php
namespace YourSite\YourBundle\Factory;

use Symfony\Bundle\AsseticBundle\Factory\AssetFactory as BaseAssetFactory;
use Assetic\Factory\Worker\CacheBustingWorker;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpKernel\KernelInterface;

class AssetFactory extends BaseAssetFactory
{
    public function __construct(KernelInterface $kernel, ContainerInterface $container, ParameterBagInterface $parameterBag, $baseDir, $debug = false)
    {
        parent::__construct($kernel, $container, $parameterBag, $baseDir, $debug);
        // Add CacheBustingWorker
        $this->addWorker(new CacheBustingWorker(CacheBustingWorker::STRATEGY_CONTENT));
    }
}

次に、assetic.asset_factory.classパラメーターを変更して、構成内のこの新しいクラスを指すようにします。私の場合、config.ymlに以下を追加しました:

parameters:
  assetic.asset_factory.class: YourSite\YourBundle\Factory\AssetFactory
于 2013-02-02T12:19:45.917 に答える
4

Asseticの現在の実装では、これを機能させるためにコードを次のように更新する必要がありました。また、xdebugを使用している場合は、最大ネストレベル(xdebug.max_nesting_level = 200)を100以上に上げる必要があることに注意してください。

<?php

namespace YourSite\YourBundle\Factory;

use Symfony\Bundle\AsseticBundle\Factory\AssetFactory as BaseAssetFactory;
use Assetic\Factory\LazyAssetManager;
use Assetic\Factory\Worker\CacheBustingWorker;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpKernel\KernelInterface;

class AssetFactory extends BaseAssetFactory
{
    public function __construct(KernelInterface $kernel, ContainerInterface $container, ParameterBagInterface $parameterBag, $baseDir, $debug = false)
    {
        parent::__construct($kernel, $container, $parameterBag, $baseDir, $debug);
        // Add CacheBustingWorker
        $this->addWorker(new CacheBustingWorker(new LazyAssetManager(new BaseAssetFactory($kernel, $container, $parameterBag, $baseDir, $debug))));
    }
}

これが誰かに役立つことを願っています

于 2013-06-07T11:15:37.537 に答える
0

アセットコードが再び変更されたため、マスターブランチのLazyAssetManagerでStategyを使用する必要はありません。

composer.jsonファイルを変更することを忘れないでください:

{
    "kriswallsmith/assetic": "dev-master@dev",
    "symfony/assetic-bundle": "dev-master@dev"
}

あなたは今これが必要です:

namespace YourSite\YourBundle\Factory;

use Symfony\Bundle\AsseticBundle\Factory\AssetFactory as BaseAssetFactory;
use Assetic\Factory\Worker\CacheBustingWorker;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpKernel\KernelInterface;

class AssetFactory extends BaseAssetFactory
{
    public function __construct(
        KernelInterface $kernel,
        ContainerInterface $container,
        ParameterBagInterface $parameterBag,
        $baseDir,
        $debug = false
    ) { 
        parent::__construct($kernel, $container, $parameterBag, $baseDir, $debug);
        // Add CacheBustingWorker
        $this->addWorker(new CacheBustingWorker());
    }
} 

php app/console cache:clear -e prod標準のファイル名が生成されないように、アセットを一度ダンプする前に忘れないでください。

于 2013-10-21T13:15:10.087 に答える
0
assetic:
    workers:
        cache_busting: ~

答えです。

于 2019-07-10T13:14:42.583 に答える