Я хочу использовать следующее внутри расширения Twig
$kernel = $container->getService('kernel');
$path = $kernel->locateResource('@AdmeDemoBundle/path/to/file/Foo.png');
но это связано с прохождением в ядре, что плохо. Плюс я не мог заставить его работать в любом случае при попытке этого метода.
Как я могу получить доступ к пути ресурсов в расширении Twig?
Расширение уже является сервисом. Я могу использовать Assetic, чтобы дать мне URL-адрес, но мне действительно нужен путь.
У меня была аналогичная потребность: мне нужно было передать фильтру 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
или чем-то еще.
Если вы хотите просто загрузить загрузку, вы должны создать Маршрут, который выполнит эту задачу.
Таким образом, вы назовете локатор внутри маршрута и просто
{{ path('route_that_does_the_locator_thing') }}
будет хорошо.
Если вам нужно включить файл в свой шаблон (например, CSS, JS..), вам нужно объявить свой файл как актив, возможно, используя Assetic.