2016-11-15 4 views
3

私はsymfony 3でキャッシュの問題を解決するために、すべてのアセットにパラメータとしてversionを導入しています。私は使用していますAsseticsymfony 3 - フレームワークがロードされる前にパラメータを設定する方法

# app/config/config.yml 
parameters: 
    version: 'v1.0' 
framework: 
    # ... 
    assets: 
     version: '%version%' 

これはうまくいきます。しかし、問題は、いくつかのリリースを本番環境に展開するときに手動で毎回parameters.ymlを編集する必要があることです。だから私は自動的に生成される/これは、展開が発生するたびに更新する必要があります。

私が考えることの1つは、ファイルの最終変更に基づいてMD5文字列を生成することです。だから、私がバージョンを手に入れることができたと言うことができます。私はバージョンとパラメータを置き換えたいです。

CompilerPassを使用して、versionパラメータを追加できます。

//AppBundle/AppBundle.php 

use AppBundle\DependencyInjection\Compiler\Version; 

class AppBundle extends Bundle 
{ 
    public function build(ContainerBuilder $container) 
    { 
     parent::build($container); // TODO: Change the autogenerated stub 

     $container->addCompilerPass(new Version()); 
    }  
} 




//AppBundle/DependencyInjection/Compiler/Version.php 
namespace AppBundle\DependencyInjection\Compiler; 


use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 

class Version implements CompilerPassInterface 
{ 
    public function process(ContainerBuilder $container) 
    { 
     $container->setParameter('version', uniqid()); 

    } 
} 

uniqid()を試験として加えた。しかし、このコードは "フレームワーク"設定が初期化された後に動作し、パラメータ "version"を追加します。このため、%version%の "framework"ブロック状態では、パラメータを見つけることができません。

「フレームワーク」を初期化する前にこのパラメータを作成するにはどうすればよいですか?

答えて

1

拡張子ごとにload()を呼び出す前に、設定を前に追加する方法もあります。ところで、私はこれを無視しますが、gitのを使用していない場合は、最後の(とIDをコミットすることを確認することで、いくつかの時間前に似たようななかった

public function prepend(ContainerBuilder $container) 
{ 
    // ... 
} 

:基本的には、ちょうどPrependExtensionInterfaceを実装し、prepend()方法を記述しhttp://symfony.com/doc/current/components/dependency_injection/compilation.html#prepending-configuration-passed-to-the-extension

を参照してください。 :)):

git log --pretty=oneline -1 --format="%H" 
関連する問題