Как использовать переменные в 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 %}
Название изображения должно быть динамичным. Пожалуйста помоги.
Код выше выдает ошибку:
Неожиданный токен "оператор" значения "~"
Решение:
В соответствии с тем, что опубликовал @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 ответ
Вы не можете использовать переменные в Assetic (и, следовательно, в {% image %}
тег). Причина в том, по словам Криса Уоллсмита (создателя Assetic):
(...) что Assetic должен иметь возможность анализировать шаблон Twig и извлекать любые ресурсы, которые там определены. Это невозможно, если вы используете переменную в теге.
Кристоф Коевет добавляет:
Ресурсы сбрасываются при использовании команды 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 %}
В этом случае вы можете перебирать цифры 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.