5

現在のページ名を取得する方法を知りたいのですが、基本的にはルートの最後のパラメーター(つまり、/newsまたは/about)だけです。ナビゲーションの現在のページを強調表示できるようにしたいので、これを行っています。

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

ただし、現在のページ名をグローバル変数に追加する方法がわかりません。私はこのようなものを使ってみました:

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

app.phpファイルの先頭にありますが、「リクエストスコープ外」エラーが発生します。しかし、これをすべてのルートに含める必要はありません。

これを行うための最良の方法は何ですか?

4

2 に答える 2

16

このようなミドルウェアの前にアプリレベルに配置すると、次のように機能します。

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

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

于 2013-01-18T20:57:54.370 に答える
1

スタンドアロンのnavtwigテンプレートで直接ナビゲーションリストを生成することもできます。次に、それをメインテンプレートにインポートします。次に、現在のページIDをビューに渡すために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()))
        ));
    });
//...
于 2016-03-03T03:53:39.030 に答える