テンプレートの Assetic メソッドに変数を渡す方法はありますか
{% stylesheets
'@SomeExampleBundle/Resources/views/ SOMEVAR /css/*'
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
だから私がやりたいのはSOMEVAR
、コントローラーから渡すことです。
この方法で可能です:
<link rel="stylesheet" href="{{ asset('bundles/yourbundle/css/'~ SOMEVAR ~'/css/' ) }}" />
今のところ、まったくありえないと思います。この背後にある理由はAssetic
、アセットをダンプするために前もって実行されるため、Twig テンプレートを実行して変数を計算しないためです。これは、PHP テンプレートで行う場合とおそらく同じです。
これは、ランタイム変数が計算および展開されないことを意味します。したがって、変数が使用されている場合、これによりアセットを生成できなくなります。Assetic
これは将来変更される可能性がありますが、アセットを生成する必要があるため、ユーザーがアセットを要求するたびに本番環境でオーバーヘッドが発生します。
Assetic
にあるコードを ( を使用せずに) 直接使用して、プログラムでアセットを定義および生成できることはわかっていますAsseticBundle
。この問題を解決するには、実験を行い、ソース コードを読み、試行錯誤を行う必要があります。
Assetic
現時点では、ドキュメントはほとんどありません。私が提供できる唯一のリンクは、こちらREADME
の Assetic の github ページにあります。これがすぐに変わることを願っています。
お役に立てれば。
Chopchopの答えを少し詳しく説明するには:
最初に、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 ) }}" />
~ 文字は、Twig テンプレートの単なる連結演算子です。
もちろん、CSS や JS でも同じように機能します。
限られた範囲のオプションで機能する別の代替手段(開発モードでは、Piotrのソリューションは機能しませんでした):
{% 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 %}
...
そうすれば、各モジュールはデプロイ時にダンプされるか、アセットによって動的に処理されます。また、 myVarを使用して、含めるモジュールを選択できます。
注: ここでは javascripts ブロックを使用しましたが、スタイルシートでも同じように機能します。
わからなかったかもしれないけど… そんなつもり?
{% stylesheets
'@SomeExampleBundle/Resources/views/' ~ somevar ~ '/css/*'
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
私の知る限り、渡された文字列stylesheets
は有効な Twig 式であるため、変数補間を自由に使用できます。
とにかく、動的な資産を持つことは良い習慣だとは思いません。あなたは正確に何を達成したいですか?より良い解決策があるかもしれません。