web-dev-qa-db-ja.com

twig関数で絶対パスを使用する方法

Symfony2(2.2)を使用したアプリケーションがあります。メールを送信したいとき、パスに問題がある

私が使用しているパスをレンダリングするため:

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

および資産の場合:

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

前の例は正常に機能しますが、パスは相対的なので、ドメインを追加する必要があります。私は次のようなことができます:

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

しかし、これは私の問題の最善の解決策ではありません。異なるドメインがあるからです。

更新

url関数を使用したパスの解決策を見つけましたが、まだ資産の解決策が必要です。

55
rkmax

Symfony 2.7以降の場合

this こちらの回答をご覧ください。

最初の作業オプション

{{ app.request.scheme ~'://' ~ app.request.httpHost ~ asset('bundles/acmedemo/images/search.png') }}

2番目の作業オプション-優先

新しいSymfonyコピーを使用して簡単なテストを行ったところです。スキームとhttpHostを組み合わせた 別のオプション もあります。

{{ app.request.getSchemeAndHttpHost() ~ asset('bundles/acmedemo/images/search.png') }}
{# outputs #}
{# http://localhost/Symfony/web/bundles/acmedemo/css/demo.css  #}
79
SirDerpington

Symfony 2.7には、絶対URLの生成に使用できる新しいabsolute_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>

および資産の場合:

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

または任意の文字列パス

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

これらのツリーの場合、次のような絶対URLになります

http://www.example.com/my/absolute/path
107
Neto Buenrostro

From Symfony2 documentation :アセットの絶対URLはSymfony 2.5で導入されました。

アセットの絶対URLが必要な場合は、3番目の引数(または絶対引数)をtrueに設定できます。

例:

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

ダニエルの答え は今のところ正常に動作するようですが、twigのasset関数を使用して絶対URLを生成することは非推奨になりました。

非推奨-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 twig関数を使用する必要があります。

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

{# Symfony 2.7 #}
{{ absolute_url(asset('logo.png')) }}

path関数でも機能することに注意してください。

{{ absolute_url(path('index')) }}
23
Quentin S.

おそらくassets_base_urls構成を使用する必要があります。

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 であるため、設定が異なることに注意してください。

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

次は私のために働く:

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

http://test_site.com および https://production_site.com を使用できます。その場合、URLをハードコーディングするのは悪い考えです。私はこれをお勧めします:

{{app.request.scheme ~ '://' ~ app.request.Host ~ asset('bundle/myname/img/image.gif')}}
3
Iliya Kolev

私はドキュメントから次のアドバイスを使用しました https://symfony.com/doc/current/console/request_context.html メールの絶対URLを取得します:

# config/services.yaml
parameters:
    router.request_context.Host: 'example.org'
    router.request_context.scheme: 'https'
1
antongorodezkiy