在 Twig Extension 中使用 locateResource

Using locateResource inside Twig Extension

我希望在 Twig Extension 中使用以下内容

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

但这涉及传递内核,这很糟糕。另外,我在尝试这种方法时仍然无法正常工作。

如何访问 Twig Extension 中的资源路径?

该扩展程序已经是一项服务。我可以使用 Assetic 给我 URL,但我真的想要路径。

如果您只想提供下载服务,您应该创建一个完成该任务的路由。

通过这种方式,您将在路线内调用定位器,一个简单的

{{ path('route_that_does_the_locator_thing') }}

会好的。

如果您需要在模板中包含一个文件(例如 CSS、JS..),您需要将您的文件声明为资产,可以使用 Assetic。

我有类似的需求:我需要将图像的 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 或其他东西。