如何在树枝函数中使用绝对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!" />
丹尼尔的答案似乎现在工作正常,但请注意,使用树枝的asset
function生成绝对的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')) }}
值得注意的是,它也适用于path
function:
{{ absolute_url(path('index')) }}
您可能想要使用assets_base_urls
configuration。
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) }}" />