CodeIgniter から Symfony 2 に切り替えています。次の方法の例を教えてください。
- ベース URL (ルート固有の部分を除いた URL) を取得します。
- この変数を twig バンドルにグローバルに渡して、すべてのテンプレートで使用できるようにします。
これは twig テンプレートで無料で利用できるようになりました (sf2 バージョン 2.0.14 でテスト済み)。
{{ app.request.getBaseURL() }}
Symfony の以降のバージョン (2.5 でテスト済み) では、以下を試してください。
{{ app.request.getSchemeAndHttpHost() }}
このルート URL を取得する必要があるのはなぜですか? 絶対 URL を直接生成できませんか?
{{ url('_demo_hello', { 'name': 'Thomas' }) }}
この Twig コードは、_demo_hello ルートへの完全な http:// URL を生成します。
実際、ウェブサイトのベース URL を取得しても、ホームページ ルートの完全な URL を取得するだけです。
{{ url('homepage') }}
(ホームページ、またはルーティングファイルでそれを呼び出すもの)。
新しいリクエストメソッドを使用できますgetSchemeAndHttpHost()
:
{{ app.request.getSchemeAndHttpHost() }}
<base href="{{ app.request.getSchemeAndHttpHost() }}"/>
またはコントローラーから
$this->container->get('router')->getContext()->getSchemeAndHttpHost()
また、js/css/image の URL には、便利な関数 asset() があります。
<img src="{{ asset('image/logo.png') }}"/>
これにより、 で始まる絶対 URL が作成され/
ます。
変数をテンプレートにグローバルに渡す代わりに、基本テンプレートを定義して、その中に「グローバル部分」をレンダリングできます。基本テンプレートは継承できます。
レンダリング テンプレートの例 symfony のドキュメントから:
<div id="sidebar">
{% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %}
</div>