2013-01-18 14 views
5

現在のページ名を取得するには、基本的にはルートの最後のパラメータ(つまり/ newsまたは/ about)を取得する方法が不思議です。ナビゲーションの現在のページをハイライト表示させたいので、これをやっています。シレックスで現在のページ名を取得する方法

理想的には、グローバル変数に現在のページ名を格納して、現在のページ名とリンクを比較し、それに応じてクラスを追加できるようにしたいと思います。

グローバル変数に現在のページ名を追加する方法はわかりません。私app.phpファイルの先頭に

$app['twig']->addGlobal('current_page_name', $app['request']->getRequestUri()); 

が、「リクエスト・スコープの外で」エラー:私はこのようなものを使用してみました。しかし、私はこれをすべてのルートに含める必要はありません。

これを行うにはどうすればよいですか?

答えて

15

あなたはこのようにミドルウェアの前にアプリレベルにそれを置く場合は、それが動作します:

$app->before(function (Request $request) use ($app) { 
    $app['twig']->addGlobal('current_page_name', $request->getRequestUri()); 
}); 

あなたの質問の「ページ名」の部分が不明である、あなたは現在のルートの名前を探しています?あなたは、ルーティングが既に完了したときに呼び出されるので、前のミドルウェアでさえも$request->get("_route")経由でアクセスすることができます。

+0

おかげで、素晴らしい作品!私の質問を更新して、私が何を意味しているかをよりよく説明しました – Pete

1

また、スタンドアローンnav twigテンプレートでナビゲーションリストを直接生成することもできます。それをメインテンプレートにインポートします。次に、silexに現在のページ識別子を渡すだけでよいでしょう。簡単な方法...たとえばSilexから、あなたのビューに "path"変数を渡す必要があります。おそらく、データベースからnav_listを取り出し、代わりにグローバル配列変数としてtwigテンプレートに渡す方が便利でしょう。しかし、この例は、あなたが意図したことをするために得ることができる最も簡単な例です。

nav.twig

{% set nav_list = [ 
    ["./",  "home"], 
    ["./contact", "contact"], 
    ["./about", "about us"] 
    {# ... #} 
] %} 

{% set link_active = path|default("") %} 

{% for link in nav_list %} 
    <li><a href="{{ link[0] }}" class="{% if link[0] == link_active %} activeClass {% endif %}" >{{ link[1] }}</a></li> 
{% endfor %} 

app.php

//... 
    $app->match('/about', function (Request $request) use ($app) { 
     return $app['twig']->render('about.twig', array(
      'path' => './'.end(explode('/', $request->getRequestUri())) 
     )); 
    }); 
//... 
関連する問題