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
関数を使用したパスの解決策を見つけましたが、まだ資産の解決策が必要です。
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 #}
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
From Symfony2 documentation :アセットの絶対URLはSymfony 2.5で導入されました。
アセットの絶対URLが必要な場合は、3番目の引数(または絶対引数)をtrueに設定できます。
例:
<img src="{{ asset('images/logo.png', absolute=true) }}" alt="Symfony!" />
ダニエルの答え は今のところ正常に動作するようですが、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')) }}
おそらく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/'
次は私のために働く:
<img src="{{ asset('bundle/myname/img/image.gif', null, true) }}" />
http://test_site.com および https://production_site.com を使用できます。その場合、URLをハードコーディングするのは悪い考えです。私はこれをお勧めします:
{{app.request.scheme ~ '://' ~ app.request.Host ~ asset('bundle/myname/img/image.gif')}}
私はドキュメントから次のアドバイスを使用しました 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'