在Twig Extension中使用locateResource

时间:2015-02-12 11:14:32

标签: php symfony kernel twig twig-extension

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

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

但这涉及传入内核,这很糟糕。另外,在尝试这种方法时,无论如何我都无法工作。

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

扩展已经是服务。我可以使用Assetic给我URL,但我真的想要这条路。

2 个答案:

答案 0 :(得分: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或别的什么。

答案 1 :(得分:0)

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

通过这种方式,您将调用路径中的定位器和一个简单的

{{ path('route_that_does_the_locator_thing') }}

会好的。

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