2012-02-18 18 views
17

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

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

+0

なぜテンプレート変数として現在のURLを渡しませんか?あるいは、URLを出力するテンプレートタグを書くこともできます。 –

答えて

6

現在のURL

現在のURLは、Webサーバーによって提供されると$_SERVERスーパーグローバルに書かれているを見つけます。この小さなスクリプト<?php echo '<pre>'; print_r($_SERVER);をサーバーとrootを介して実行し、探している値を探します。このテーマに関する

関連質問:

The PHP manual describes the nature of the available $_SERVER values here

あなたはURLを持っていた後TWIG

でURLを取得するには、小枝のテンプレートインスタンス上​​を呼び出すときにテンプレート変数として渡す必要があります。たとえば、これをコード化するかもしれません。

$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 }}構文を使用し、テンプレートに変数を使用します。

+0

TwigからURLを取得するための内部ツール(変数otメソッド)があるのだろうか? – nKognito

+0

目的のためにすでに書かれたコードがいくつか見つかるかもしれませんが、現在のURLを取得するのはテンプレートエンジンのスコープ内にないので、Twigに何かが組み込まれていることは間違いありません。 – erisco

0

ここで私はそれをsliexフレームワークで一般的にすることがわかりました。 私のソリューションは完璧ではないと思いますが、仕事は終わりです。あなたのPHPコード内

は、このコードを追加します。

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

その後、あなたの小枝テンプレートにあなたは私がこの方法のbotomラインが何であるかを知ってみましょう

{{ app.current_url }} 

を行うことができます。

25

以下サイレックスで動作し、最も確かSymfony2の中、彼らはRequestクラスを共有するよう(私もテストしていない):

{{ app.request.getRequestUri() }} 
+5

'{{app.request.requestUri}}' – eightyfive

+0

さらに良い、はい。 – neemzy

+1

これは推奨されていません。使用しないでください。 https://github.com/silexphp/Silex/issues/1257#issuecomment-141058724 – Tieme

2

現時点では、Symfony\Component\HttpFoundation\RequestStackを使用することをお勧めします。

http://symfony.com/blog/new-in-symfony-2-4-the-request-stackを参照してください。symfonyの2.4のよう

、ベストプラクティスは、要求サービスを注入しないようにですが、代わりにrequest_stackサービスを注入するために[...]

だから、サイレックス・アプリケーションでそれがで達成することができました:

app.request_stack.getCurrentRequest.getUri 
関連する問題