Twigテンプレートから現在のURLを取得するにはどうすればよいですか?
他のフレームワークなしで、PHPでTwigを使用しています。
現在のURLの検索
現在のURLはWebサーバーから提供され、_$_SERVER
_スーパーグローバルに書き込まれます。この小さなスクリプト<?php echo '<pre>'; print_r($_SERVER);
をサーバーとルートを介して実行し、探している値を見つけます。
この問題に関する関連質問:
PHPマニュアルには、利用可能な_$_SERVER
_値の性質がここに記載されています 。
TWIGでURLを取得する
URLを取得したら、Twigテンプレートインスタンスでrender(...)
を呼び出すときに、テンプレート変数として渡す必要があります。たとえば、次のようにコーディングできます。
_$current_url = // figure out what the current url is
// pass the current URL as a variable to the template
echo $template->render(array('current_url' => $current_url));
_
テンプレートで変数を使用するには、_{{ variable_name }}
_構文を使用します。
次の例はSilexで動作し、Symfony2ではRequestクラスを共有しているため、最も確実に機能します(ただし、テストはしていません)。
{{ app.request.getRequestUri() }}
移動 http://api.symfony.com/2.3/Symfony/Component/HttpFoundation/Request.html
または:{{ app.request.getUri() }}
(完全なUriの場合)。
ベストプラクティスを念頭に置いて、現時点ではSymfony\Component\HttpFoundation\RequestStack
。
http://symfony.com/blog/new-in-symfony-2-4-the-request-stack を参照してください。
Symfony 2.4以降、ベストプラクティスはリクエストサービスを注入せず、代わりにrequest_stackサービスを注入することです[...]
したがって、Silexアプリケーションでは、次のようにして実現できます。
app.request_stack.getCurrentRequest.getUri
ここで私はそれをsliexフレームワークで一般的にすることがわかりました。私の解決策は完璧ではないと思いますが、それは仕事を成し遂げることです。
あなたのPHPコードにこのコードを追加してください:
$app = new Silex\Application();
// add the current url to the app object.
$app['current_url'] = $_SERVER['REQUEST_URI'];
次に、あなたのTwigテンプレートであなたが行うことができます
{{ app.current_url }}
このメソッドのボトムラインが何であるかを教えてください。