繁体   English   中英

将变量传递到Symfony2中的Assetic资产URL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM