有没有办法给一个变量传递给Assetic方法模板传递一个变量到Assetic资产URL中的Symfony2
{% stylesheets
'@SomeExampleBundle/Resources/views/ SOMEVAR /css/*'
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
所以我想要做的就是从控制器通过SOMEVAR
。
有没有办法给一个变量传递给Assetic方法模板传递一个变量到Assetic资产URL中的Symfony2
{% stylesheets
'@SomeExampleBundle/Resources/views/ SOMEVAR /css/*'
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
所以我想要做的就是从控制器通过SOMEVAR
。
现在,我认为根本不可能。其原因是Assetic
预先运行以转储资产,因此它不运行Twig模板来计算变量。如果您在PHP模板中执行此操作,则这可能是相同的。
这意味着运行时变量将不会被计算和展开。因此,如果使用变量,这将无法生成资产。这可能会在将来发生变化,但这会在每次用户请求资产时产生生产开销,因为Assetic
需要生成资产。
我知道有可能通过使用Assetic
中的代码直接(不是使用AsseticBundle
)以编程方式定义和生成资产。您需要进行实验,阅读源代码,并进行试验和错误以解决此问题。
目前几乎没有关于Assetic
的文档。我可以给的唯一链接是在Assetic here的github页面上找到的README
。我希望这会很快改变。
希望这会有所帮助。
其中一些成为可能。 [Assetic中的资产变量](http://jmsyst.com/blog/asset-variables-in-assetic)显示在v1.1中,可以使用具有已知可能值集合的变量。 – roverwolf
也许我不明白,但是......你在试图这样做吗?
{% stylesheets
'@SomeExampleBundle/Resources/views/' ~ somevar ~ '/css/*'
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
,因为据我所知,传递给stylesheets
的字符串是一个有效的嫩枝表达,所以你可以自由地使用变量代换。
无论如何,我认为拥有动态资产并不是一个好习惯。你到底想要达到什么目标?可能有更好的解决方案。
不!阅读马特的回答 –
嗯,现在有点晚了,但是...感谢提醒! :) –
它通过这种方式是可能的:
<link rel="stylesheet" href="{{ asset('bundles/yourbundle/css/'~ SOMEVAR ~'/css/') }}" />
非常好,非常感谢。 –
这不使用'assetic',而是使用symfony的'资产'功能。你不能使用这个过滤器 – gondo
为了详细说明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) }}" />
〜字符只是在嫩枝模板连接运算符。
当然工程与CSS和JS一样。
另一种选择,这与选择范围有限(彼得的解决方案并没有在开发模式为我工作)工作原理:
{% 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 %}
...
这样一来,每个模块将在部署倾倒或者动态地assetic处理,并且您可以选择使用myVar包含哪个模块。
注:我在这里使用了javascripts块,但它与样式表一样工作。
使用PHP作为模板语言并编写脚本。否则,在PHP中实现逻辑并将其注入到树枝语言中。 – hakre