web-dev-qa-db-ja.com

Twigテンプレートエンジン:現在のURLを取得

Twigテンプレートから現在のURLを取得するにはどうすればよいですか?

他のフレームワークなしで、PHPでTwigを使用しています。

17
nKognito

現在の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 }}_構文を使用します。

7
erisco

次の例はSilexで動作し、Symfony2ではRequestクラスを共有しているため、最も確実に機能します(ただし、テストはしていません)。

{{ app.request.getRequestUri() }}
27
neemzy

移動 http://api.symfony.com/2.3/Symfony/Component/HttpFoundation/Request.html

または:{{ app.request.getUri() }}(完全なUriの場合)。

4
Breith

ベストプラクティスを念頭に置いて、現時点では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
2
Pixadelic

ここで私はそれをsliexフレームワークで一般的にすることがわかりました。私の解決策は完璧ではないと思いますが、それは仕事を成し遂げることです。

あなたのPHPコードにこのコードを追加してください:

$app = new Silex\Application();
// add the current url to the app object.
$app['current_url'] = $_SERVER['REQUEST_URI'];

次に、あなたのTwigテンプレートであなたが行うことができます

{{ app.current_url }}

このメソッドのボトムラインが何であるかを教えてください。

0
Benjamin