如何在树枝函数中使用绝对path

我有一个Symfony2(2.2)的应用程序。 当我想发送邮件时,我遇到了path问题,这些path都是相对path,显然不适用于邮件

用于呈现我正在使用的path:

<a href="{{ path('route_name', {'param' : value}) }}">A link</a> 

和资产:

 <img src="{{ asset('bundle/myname/img/image.gif') }}" alt="Title"/> 

前面的例子工作正常,但path是相对的,因此我需要追加域。 我可以做这样的事情:

 <a href="http://domain.com{{ path('route_name', {'param' => param1}) }}">A link</a> 

但这不是我的问题的最佳解决scheme,因为我有不同的域名。

更新

我find了具有url函数的path的解决scheme,但我仍然需要资产的解决scheme。

对于Symfony 2.7和更新

在这里看到这个答案。

第一个工作选项

 {{ app.request.scheme ~'://' ~ app.request.httpHost ~ asset('bundles/acmedemohttp://img.dovov.comsearch.png') }} 

第二个工作选项 – 首选

刚做了一个干净的新Symfony副本快速testing。 还有一个选项 ,它结合了scheme和httpHost:

 {{ app.request.getSchemeAndHttpHost() ~ asset('bundles/acmedemohttp://img.dovov.comsearch.png') }} {# outputs #} {# http://localhost/Symfony/web/bundles/acmedemo/css/demo.css #} 

Symfony 2.7有一个新的absolute_url ,可以用来生成绝对url。 http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component#template-function-changes

它将处理这两种情况或一个pathstring:

 <a href="{{ absolute_url(path('route_name', {'param' : value})) }}">A link</a> 

和资产:

 <img src="{{ absolute_url(asset('bundle/myname/img/image.gif')) }}" alt="Title"/> 

或者对于任何stringpath

 <img src="{{ absolute_url('my/absolute/path') }}" alt="Title"/> 

在这些树的情况下,你最终会得到一个绝对的URL

 http://www.example.com/my/absolute/path 

来自Symfony2文档 :资产的绝对URL在Symfony 2.5中引入。

如果您需要资源的绝对URL,则可以将第三个参数(或绝对参数)设置为true:

例:

 <img src="{{ asset('images/logo.png', absolute=true) }}" alt="Symfony!" /> 

丹尼尔的答案似乎现在工作正常,但请注意,使用树枝的assetfunction生成绝对的URL现在已被弃用:

DEPRECATED – 使用Twig asset()函数生成绝对URL在2.7中已弃用,并将在3.0中删除。 请改用absolute_url()。

以下是官方公告: http : //symfony.com/blog/new-in-symfony-2-7-the-new-asset-component#template-function-changes

你必须使用absolute_url分支函数:

 {# Symfony 2.6 #} {{ asset('logo.png', absolute = true) }} {# Symfony 2.7 #} {{ absolute_url(asset('logo.png')) }} 

值得注意的是,它也适用于pathfunction:

 {{ absolute_url(path('index')) }} 

您可能想要使用assets_base_urlsconfiguration。

 framework: templating: assets_base_urls: http: [http://www.website.com] ssl: [https://www.website.com] 

http://symfony.com/doc/current/reference/configuration/framework.html#assets


请注意,自Symfony 2.7以来,configuration有所不同:

 framework: # ... assets: base_urls: - 'http://cdn.example.com/' 

有可能有http://test_site.com和https://production_site.com 。 然后硬编码的url是一个坏主意。 我会build议这样的:

 {{app.request.scheme ~ '://' ~ app.request.host ~ asset('bundle/myname/img/image.gif')}} 

以下为我工作:

 <img src="{{ asset('bundle/myname/img/image.gif', null, true) }}" />