如何在Assetic中使用变量

时间:2014-05-01 07:33:16

标签: symfony twig assetic

我搜索了很多但找不到解决方案来实现这个目标:

{% for i in 1..6 %}
   <li>
      {% image '@MyBundle/Resources/public/images/college/demo/facilities/thumbs/laboratory/'~i~'.jpg' %}
      <img class="facThumb" src="{{ asset_url }}" alt="Facilitiy"/>
      {% endimage %}
   </li>
{% endfor %}

图像名称应该是动态的。请帮忙。

以上代码抛出错误:

  

值为“〜”的意外标记“operator”

解决方案:

根据@Nic发布的内容(接受的答案),唯一的解决方法似乎是:

{% for i in 1..6 %}
    <li>
        <img src="{{ asset('bundles/digicreekil/images/college/demo/facilities/thumbs/laboratory/t'~i~'.jpg') }}" alt='demo'/>
    </li>
{% endfor %}

1 个答案:

答案 0 :(得分:5)

您不能在Assetic中使用变量(因此也不能在{% image %}标记中使用)。 根据{{​​3}}(Assetic的创建者)的说法,原因是:

  

(...)Assetic需要能够解析Twig模板并提取在那里定义的任何资产。如果在标记中使用变量,则无法进行此操作。

Kris Wallsmith补充道:

  

为此使用CLI命令时会转储资产,而不是在呈现页面时。所以你不能使用变量,因为你没有它们的值。

有关完整的对话,请参阅Christophe Coevoet

请记住,Assetic在您运行app/console assetic:dump时创建并优化资产,而不是在实际呈现页面时。因此,它无法知道任何值,它只能用于静态资产。

因此,如果您想使用动态资产,则必须执行以下操作:

{% for i in 1..6 %}
   <li>
      <img class="facThumb" src="{{ asset('images/college/demo/facilities/thumbs/laboratory/'~i~'.jpg') }}" alt="Facilitiy"/>
   </li>
{% endfor %}

在这种情况下,您可以遍历数字1-6并使用资产URL中的变量,因为您没有使用Assetic,而是使用Twig的asset()函数。 asset()只返回资产的完整URL,它不会进行任何优化,因此可以在运行时执行。

但是如果你想使用Assetic的优化和过滤器,你也可以给它静态资产:

<li>
    {% image '@MyBundle/Resources/public/images/college/demo/facilities/thumbs/laboratory/1.jpg' %}
    <img class="facThumb" src="{{ asset_url }}" alt="Facilitiy"/>
    {% endimage %}
</li>
<li>
    {% image '@MyBundle/Resources/public/images/college/demo/facilities/thumbs/laboratory/2.jpg' %}
    <img class="facThumb" src="{{ asset_url }}" alt="Facilitiy"/>
    {% endimage %}
</li>
<li>
    {% image '@MyBundle/Resources/public/images/college/demo/facilities/thumbs/laboratory/3.jpg' %}
    <img class="facThumb" src="{{ asset_url }}" alt="Facilitiy"/>
    {% endimage %}
</li>

(等)

这样,您必须复制相同的代码6次,但它允许您使用Assetic。