如何在Assetic中使用变量

aBh*_*jit 2 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 %}
Run Code Online (Sandbox Code Playgroud)

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

上面的代码抛出错误:

值"〜"的意外标记"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 %}
Run Code Online (Sandbox Code Playgroud)

Nic*_*tel 5

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

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

Christophe Coevoet补充道:

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

有关完整的对话,请参阅此GitHub问题.

请记住,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 %}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以遍历数字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>
Run Code Online (Sandbox Code Playgroud)

(等等.)

这样,您将需要复制相同的代码6次,但它允许您使用Assetic.