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

0

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

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

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

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

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

  • 0
    Можете ли вы обернуть его в сервис (чтобы вы могли использовать его и в другом месте) и использовать сервис в расширении?
  • 0
    Это уже в сервисе. Я отредактирую и проясню это. Как получить то, что мне нужно, в сервис?
Теги:
twig
kernel
twig-extension

2 ответа

1
Лучший ответ

У меня была аналогичная потребность: мне нужно было передать фильтру 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 или чем-то еще.

0

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

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

{{ path('route_that_does_the_locator_thing') }}

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

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

  • 0
    Это изображение, которое я хочу найти, используя Assetic, дайте мне URL, что не очень хорошо. Я хочу путь.
  • 0
    Зачем вам нужен путь вместо URL?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню