Использование locateResource внутри расширения Twig

Я хочу использовать следующее внутри расширения Twig

$kernel = $container->getService('kernel');
$path = $kernel->locateResource('@AdmeDemoBundle/path/to/file/Foo.png');

но это связано с передачей в ядре, что плохо. Плюс я не мог заставить его работать в любом случае при попытке этого метода.

Как я могу получить доступ к пути ресурсов внутри расширения Twig?

Расширение уже является услугой. Я могу использовать Assetic, чтобы дать мне URL, но я действительно хочу путь.

0

Решение

У меня была похожая потребность: мне нужно было передать фильтру URL-адрес изображения, чтобы отобразить его в for цикл и построить строку.

Я передал URL непосредственно в фильтр следующим образом:

{%  image '@AppBundle/Resources/public/images/my_asset.png' %}
{% set resolved_asset_url = asset_url %}
{% endimage %}

{{ my_var|filter_name(resolved_asset_url)|raw(html) }}

Таким образом, шаблон Twig разрешает правильный URL-адрес ресурса, устанавливает его как переменную, а затем я передаю его фильтру изнутри самого шаблона, без необходимости иметь дело с kernel или что-то другое.

1

Другие решения

Если вы хотите просто отправить загрузку, вы должны создать маршрут, который выполняет эту задачу.

Таким образом, вы будете вызывать локатор внутри маршрута, и простой

{{ path('route_that_does_the_locator_thing') }}

будет хорошо.

Если вам нужно вместо этого включить файл в шаблон (например, CSS, JS ..), вам нужно объявить свой файл как актив, возможно, используя Assetic.

0

По вопросам рекламы [email protected]