如何在Silex中获取当前页面名称

时间:2013-01-18 20:48:37

标签: symfony twig silex

我想知道如何获取当前页面名称,基本上“只是”路由中的最后一个参数(即/ news或/ about)。我这样做是因为我希望能够突出显示导航中的当前页面。

理想情况下,我想将当前页面名称存储在全局变量中,以便在Twig中我可以将当​​前页面名称与链接进行比较并相应地添加一个类。

我无法弄清楚如何将当前页面名称添加到全局变量中。我尝试过这样的事情:

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

位于我的app.php文件的顶部,但是“请求范围之外”错误。但我不想在每条路线中加入这一点。

最好的方法是什么?

2 个答案:

答案 0 :(得分:16)

如果你在像这样的中间件之前把它放到应用程序级别,那就行了:

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

您的问题的“页面名称”部分不清楚,您是否在寻找当前路线的名称?您甚至可以在之前的中间件中通过$request->get("_route")访问它,因为在路由已经完成时会调用它。

答案 1 :(得分:1)

您还可以直接在独立导航树枝模板中生成导航列表。然后将其导入主模板。然后你只需要让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()))
        ));
    });
//...