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

rkm*_*max 56 routing symfony twig

我有一个Symfony2(2.2)的应用程序.当我想发送邮件时,我遇到路径问题,这些路径都是相对路径,显然在电子邮件中不起作用

用于渲染我正在使用的路径:

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

和资产:

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

前面的示例工作正常,但路径是相对的,因此我需要附加域.我可以这样做:

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

但这不是我问题的最佳解决方案,因为我有不同的域名.

更新

我找到了具有该url功能的路径解决方案,但我仍然需要一个资产解决方案.

Net*_*tro 110

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

它将适用于这两种情况或路径字符串:

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

和资产:

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

或者对于任何字符串路径

<img src="{{ absolute_url('my/absolute/path') }}" alt="Title"/>
Run Code Online (Sandbox Code Playgroud)

在那些树案例中,你最终会得到一个绝对的URL

http://www.example.com/my/absolute/path
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是迄今为止最新的答案. (4认同)
  • 这是V3.0 +的最佳答案 (3认同)

Sir*_*ton 79

对于Symfony 2.7和更新版本

在这里看到这个答案.

第一个工作选择

{{ app.request.scheme ~'://' ~ app.request.httpHost ~ asset('bundles/acmedemo/images/search.png') }}
Run Code Online (Sandbox Code Playgroud)

第二工作选项 - 首选

刚刚使用干净的新Symfony副本进行了快速测试.还有另一个选项,它结合了scheme和httpHost:

{{ app.request.getSchemeAndHttpHost() ~ asset('bundles/acmedemo/images/search.png') }}
{# outputs #}
{# http://localhost/Symfony/web/bundles/acmedemo/css/demo.css  #}
Run Code Online (Sandbox Code Playgroud)

  • 你可以将这个快捷方式改为{{app.request.getSchemeAndHttpHost~intagity('images/foo.jpg')}}啊没看到你的更新:D (4认同)
  • 这个答案似乎有点过时了.请参阅2015年9月24日Neto表格中的答案. (3认同)

小智 51

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

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

例:

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


Que*_* S. 23

Daniel的回答似乎现在正常,但请注意,asset现在不推荐使用twig 函数生成绝对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')) }}
Run Code Online (Sandbox Code Playgroud)

有趣的是,它也适用于path功能:

{{ absolute_url(path('index')) }}
Run Code Online (Sandbox Code Playgroud)


che*_*fly 13

您可能想要使用assets_base_urls配置.

framework:
    templating:
        assets_base_urls:
            http:   [http://www.website.com]
            ssl:   [https://www.website.com]
Run Code Online (Sandbox Code Playgroud)

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


请注意,自Symfony 2.7以来配置不同:

framework:
    # ...
    assets:
        base_urls:
            - 'http://cdn.example.com/'
Run Code Online (Sandbox Code Playgroud)