2011-11-27 6 views
12

にAssetic資産URLに変数を渡しだから私は何をしたいのか、コントローラからSOMEVARを渡しているテンプレートはSymfony2の

{% stylesheets 
    '@SomeExampleBundle/Resources/views/ SOMEVAR /css/*' 
%} 
<link rel="stylesheet" href="{{ asset_url }}" /> 
{% endstylesheets %} 

にAsseticメソッドに変数を渡す方法はあります。

+0

PHPをテンプレート言語として使用し、スクリプトを作成するだけです。そうでなければ、PHPでロジックを実装し、それをtwig言語に注入します。 – hakre

答えて

18

今のところ私は全く可能ではないと思います。これは、Asseticが資産をダンプするために実行されるため、変数を計算するためにTwigテンプレートは実行されないためです。これは、PHPテンプレートで行う場合と同じです。

これは、実行時変数が計算されて展開されないことを意味します。したがって、変数を使用すると、資産を生成することが不可能になります。これは将来変更される可能性がありますが、Asseticは資産を生成する必要があるため、資産がユーザーによって要求されるたびに生産時にオーバーヘッドが発生します。

私は、プログラムで定義して、にあるコードを直接使用して資産を定義して生成することができます(AsseticBundleを使用することはできません)。この問題を解決するには、実験、ソースコードの読み込み、試行錯誤が必要です。

現時点ではAsseticにはほとんどドキュメントがありません。私が与えることができる唯一のリンクはで、Assetic hereのgithubページにあります。私はこれがすぐに変わることを願っている。

これが役に立ちます。

+0

これが可能になっています。 [Asseticの資産変数](http://jmsyst.com/blog/asset-variables-in-assetic)は、v1.1では既知の可能な値のセットで変数を使用することが可能であることを示しています。 – roverwolf

-1

多分私は理解しませんでしたが...あなたはこれをやろうとしていますか?あなたは変数展開を自由に使用しているので、

{% stylesheets 
    '@SomeExampleBundle/Resources/views/' ~ somevar ~ '/css/*' 
%} 
<link rel="stylesheet" href="{{ asset_url }}" /> 
{% endstylesheets %} 

は、ので、私の知る限り、stylesheetsに渡された文字列は、有効な小枝式です。

とにかく、私は動的資産を持つことをお勧めしません。あなたは何を達成したいのですか?より良い解決策があるかもしれません。

+1

Mattの答えを読む –

+0

さて、少し遅れましたが...ヘッドアップのおかげで! :) –

26

それがこの方法によって可能である:

<link rel="stylesheet" href="{{ asset('bundles/yourbundle/css/'~ SOMEVAR ~'/css/') }}" /> 
+0

素晴らしい、ありがとう。 –

+5

これは 'assetic'を使わず、symfonyの' asset'関数を使います。これでフィルタを使用することはできません – gondo

3

Chopchopの答えに少し詳しく説明するには:

まず、それは何を知っている必要があるとして、あなたは、asseticニーズがダンプするすべてのファイルをインクルードする必要があり必要がなくなりました。条件付きで行うことができるのは、実行時にアセット自体を含めることです。

だから最初asseticの部分に置く:

{% javascripts 
'@ExampleComBundle/Resources/public/js/module1.js' 
'@ExampleComBundle/Resources/public/js/module2.js' 
%} 
{% endjavascripts %} 

今あなたが望んだ状態に置くことができます。どちらも、これらのスクリプトは、デプロイメント時にダンプされますが、あなたは、するかを実行時に選択することができます:

<link rel="stylesheet" href="{{ asset('bundles/examplecombundle/js/module' ~ WHICH_MODULE_TO_INCLUDE ~ '.js) }}" /> 

〜文字は小枝テンプレート内だけで連結演算子です。

もちろん、CSSとJSと同じように動作します。オプションの限定された範囲(ピョートルのソリューションは、DEVモードで私のために動作しませんでした)で動作します

1

別の代替、:

{% javascripts 
    '@AcmeDemoBundle/Resources/public/js/module_A.js' 
    output='js/module_A.js' 
%} 
    {% if myVar == "A" %} 
     <script src="{{ asset_url }}"></script> 
    {% endif %} 
{% endjavascripts %} 

{% javascripts 
    '@AcmeDemoBundle/Resources/public/js/submodule1_B.js' 
    '@AcmeDemoBundle/Resources/public/js/submodule2_B.js' 
    '@AcmeDemoBundle/Resources/public/js/submodule3_B.js' 
    output='js/module_B.js' 
%} 
    {% if myVar == "B" %} 
     <script src="{{ asset_url }}"></script> 
    {% endif %} 
{% endjavascripts %} 

... 

こうすることで、各モジュールは、展開にダンプまたは動的asseticによって処理されますどのモジュールを含めるかは、myVarを使用して選択できます。

注:ここではjavascriptsブロックを使用しましたが、スタイルシートでも同じように動作します。