Я хочу использовать следующее внутри расширения 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.