有没有办法在模板中将变量传递给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
,而是使用了 Symfony 的 asset
函数。你无法在此使用过滤器。 - gondo目前来说,我认为这是不可能的。原因是 Assetic
首先运行以转储资源,所以它不会运行 Twig 模板来计算变量。如果您在 PHP 模板中执行此操作,这可能是相同的。
这意味着运行时变量将不会被计算和扩展。因此,如果使用变量,则无法生成资产。这可能会在将来发生变化,但这将增加生产中每次用户请求资产时的开销,因为 Assetic
需要生成资产。
我知道可以通过直接使用 Assetic 中找到的代码(而不是使用 AsseticBundle)以编程方式定义和生成资产。您需要尝试、阅读源代码并进行反复试验来解决此问题。
目前几乎没有关于 Assetic
的文档。我能提供的唯一链接是 Assetic 在 github 页面上找到的 README
,链接在这里。希望这很快就会改变。
希望这有所帮助。
稍微说明一下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 ) }}" />
在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 %}
...
也许我没理解对,但是……你是在尝试做这个吗?
{% stylesheets
'@SomeExampleBundle/Resources/views/' ~ somevar ~ '/css/*'
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
据我所知,传递给stylesheets
的字符串是有效的Twig表达式,因此您可以自由使用变量插值。
无论如何,我认为拥有动态资产并不是一个好的做法。您到底想要实现什么?可能有更好的解决方案。