![](/img/trans.png)
[英]How to access the URL of an image in CSS that Symfony2 Assetic dumped?
[英]Pass a variable to an Assetic asset URL in Symfony2
有没有办法将变量传递给模板中的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
文档很少Assetic
没有。 我唯一能给你的链接是README
Assetic GitHub的网页上找到这里 。 我希望这会很快改变。
希望这可以帮助。
详细说明Chopchop的答案:
首先,您需要包括资产需要转储的所有文件,因为它需要知道您需要转储的内容。 您可以有条件地做的是在运行时包含资产本身。
因此,首先放入资产部分:
{% 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表达式,因此您可以自由使用变量插值。
无论如何,我认为拥有动态资产不是一个好习惯。 您到底想实现什么? 可能有更好的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.