13

有没有办法将变量传递给模板中的 Assetic 方法

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

所以我想做的是SOMEVAR从控制器传递。

4

5 回答 5

25

可以通过这种方式:

<link rel="stylesheet" href="{{ asset('bundles/yourbundle/css/'~ SOMEVAR ~'/css/' ) }}" />
于 2012-04-28T23:22:29.400 回答
18

目前,我认为根本不可能。这背后的原因Assetic是预先运行以转储资产​​,因此它不运行 Twig 模板来计算变量。如果您在 PHP 模板中执行此操作,这可能是相同的。

这意味着不会计算和扩展运行时变量。因此,如果使用变量,则无法生成资产。这可能会在未来发生变化,但这会在每次用户请求资产时在生产中产生开销,因为Assetic需要生成资产。

我知道可以通过使用Assetic直接在中找到的代码(而不是使用AsseticBundle)以编程方式定义和生成资产。您将需要进行试验、阅读源代码并进行试验和错误来解决这个问题。

目前几乎没有文档Assetic。我可以提供的唯一链接是在READMEAssetic 的 github 页面上找到。我希望这会很快改变。

希望这可以帮助。

于 2011-11-27T15:04:30.683 回答
3

详细说明 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 也一样。

于 2013-11-20T23:42:08.943 回答
1

另一种选择,适用于有限范围的选项(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 块,但它与样式表的工作方式相同。

于 2015-09-15T09:45:42.387 回答
-1

也许我不明白,但是……你是想这样做吗?

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

因为据我所知,传递给的字符串stylesheets是有效的 Twig 表达式,因此您可以自由使用变量插值。

无论如何,我认为拥有动态资产不是一个好习惯。你到底想达到什么目的?可能有更好的解决方案。

于 2011-11-27T18:21:53.253 回答